Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wykrywanie wyrażeń regularnych
Forum PHP.pl > Forum > PHP
Virti
Witam
Czy ma ktoś pomysł, jak z dużym prawdopodobieństwem wykryć, czy ciąg znaków jest wyrażeniem regularnym? Próbowałem szukać w manualu, jednak chyba taka funkcja nie istnieje, więc czy jest jakiś sposób na to?

Pozdrawiam
dr_bonzo
Ale chcesz to wykryc skryptem czy oczami?


1. delimetery

'#....#'

'/...../'

2. ale sa tez modyfiikatory

'#....#mi' itp

3. przyklady WR

'#abcdefghijkl#' - to tez jest wyrazenia

Jest to bardzo trudne, mozesz szukac ^ czy $ na koncu stringa, nawiasow [] () + * ? ale i tak ci to nic nie da, bo prawie kazdy string jest wyrazeniem regularnym:
- musi miec delimetery
- musi miec prawidlowa skladnie wyrazenia (np. zamkniete ")" )
Virti
To ja może w takim razie uściślę o co mi chodzi. Chcę napisać router z możliwością deklarowania statycznych przekierowań.
I teraz te przekierowania dzielą się na:
 - zwykłe, tekstowe
 - wyrażenia regularne, dla podstawienia odpowiednich wartości

Problem w tym, że te tekstowe można załatwić za pomocą str_replace('przekierowanie', 'cel', $route); natomiast wyrażeń regularnych tak nie obsłużę, co jest oczywiste. Potrzebuję więc funkcji preg_replace('#'.preg_quote('przekierowanie').'#', 'cel', $route);

Jak widać (w przykładzie z preg_replace()winksmiley.jpg przekierowanie nie zawiera delimetrów (dobrze napisałem? smile.gif). Kwestia jak sprawdzić np. składnię takiego przekierowania (jestem totalnym zerem, jeżeli chodzi o regexp)? Chodzi o to, żeby wykryć czy jest potrzeba zaprzęgania do tego celu preg_replace, czy wystarczy tylko str_replace();.

Acha, oczywiście zależy mi, żeby skrypt to wykrywał.

I jeszcze jedno pytanie. Czy jest w ogóle sens takiego podziału? Czy samo wykrycie, nie będzie bardziej zasobożerne, niż traktowanie każdego przekierowania z góry jako wyrażenia?
ayeo
W sumie to nie do końca rozwiązuje Twój problem, ale preg_match(); zwraca FALSE w przypadku wystąpienia błędu.

  1. <?
  2. $pattern = "jakieś wyrażenie regularne lun zdanie";
  3. $text = "Jakieś inne zdanie, w którym będziemy szukać";
  4. echo !@preg_match($pattern,$text)?"niepoprawne":"poprawne";
  5. ?>


Nie jestem przekonany czy to dobry sposób, ale działa biggrin.gif
bim2
no nie wiem, bo ktos źle napisze "Tuta jest ( błąd" i już nie działa ;]

Nie możesz oznaczać jakoś, że to akurat wyrażenie regularne?
Virti
Cytat
no nie wiem, bo ktos źle napisze "Tuta jest ( błąd" i już nie działa ;]

No to już trzeba się pilnować winksmiley.jpg

Cytat
Nie możesz oznaczać jakoś, że to akurat wyrażenie regularne?

No, jeżeli nie ma żadnego sposobu na rozpoznanie regex to będę zmuszony to w jakiś sposób oznaczyć.
bim2
Sprawdz czy istnieje \(.+?\) oraz \[.*?\] jeśli jest daj do regexa, ale i tak musisz się pilnować smile.gif Nigdy nie wykryjesz 100% pewności, że to regex winksmiley.jpg
ayeo
Mój sposób rozpoznaje w 100% poprawne regexpy biggrin.gif
bim2
Tak, ale jak ktoś walnie byka to posypie się skrypt.

EDIT:
Aaa, kapie. Zauważyłem to co mi było niewidoczne. Tak twój skrypt sprawdza w 100%, zwracam honor biggrin.gif
Crozin
Raczej powinno być:
  1. <?php
  2. echo (@preg_match($wyrazenie, '') !== false) ? 'to jest regexp' : 'to nie jest regexp';
  3. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.