Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> część wspólna regexp-ów
zimi
post
Post #1





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

Ostrzeżenie: (0%)
-----


no dobra... co wrażliwszych chyba powinienem prosić o to żeby usiedli przed przeczytaniem treści problemu

tak więc chciałbym aby mając 2 regexp-y w jakiś sensowny sposób podać przykładowy ciąg znaków który pasuję jednocześnie do obu lub generuje wyrażenie regularne które jest wynikiem "przecięcia" tych dwóch wyrażeń regularnych

wszystkie wzorce będą postaci: @^wzorzec$@ czyli wyrażenie regularne będzie obejmowało dany ciąg znaków zawsze od początku do końca...

może przykład
załóżmy że mamy wyrażenia: @^a{3,5}$@ i @^a{4,6}$@ nasza funkcja lub coś powinna zwracać 'aaaa', 'aaaaa' lub @^a{4,5}$@

oczywiście to tylko prosty przykład chciałbym aby to działało dla bardziej skomplikowanych wyrażeń regularnych

czy ktoś zna już jakiś skrypt, program cokolwiek... działające w ten sposób, tudzież ma pomysł jak się za to zabrać
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zimi
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

Ostrzeżenie: (0%)
-----


Cytat
Heh, nie zdajesz sobie sprawy z tego jakie to skomplikowane. Już nawet wygenerowanie najprostszego pasującego ciągu na podstawie wyrażenia regularnego ciężko byłoby napisać.

Bo ja wiem czy tak ciężko to napisać, trywialne to nie jest... ale nie trudniejsze niż samo dopasowywanie wyrażeń regularnych do wzorca

zresztą, nie po to napisałem:
Cytat
no dobra... co wrażliwszych chyba powinienem prosić o to żeby usiedli przed przeczytaniem treści problemu

żeby to miało być proste (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Cytat
To znaczy masz jakiś przykładowy tekst i traktujesz go sekwencyjnie tymi wyrażeniami?

Nie, nie, bardziej trzeba patrzeć na mój problem jako na zbiór if-else'ów
regexpy będą pisane "niezależnie" od siebie i będzie ich "kilka"... załóżmy 150...
chodzi o to że tworząc nowy wzorzec nie musisz pamiętać o poprzednich
a zachodzenie na siebie tych wyrażeń regularnych należałoby traktować jako błąd
w sumie rozwiązanie nie jest mi potrzebne koniecznie w PHP
zaczynam się zastanawiać czy przyda mi się na tyle żeby zrekompensować mi nakład pracy

Cytat
Wiem, że "^a{4,5}$" wygląda o wiele ładniej niż: "@(?(?=^a{3,5}$)(?:^a{4,6}$)|(?!.*))@", ale oba wyrażenia dopasują dokładnie to samo.

Tak masz rację... nie pomyślałem o tym w ten sposób, kod zrozumiałem ale nie zrozumiałem przesłania jaki ten kod miał nieść, myślałem o nim w trochę inny sposób...

zależało mi raczej na tej wersji uproszczonej... bo gdy wzorce razem nie dopasują niczego to dla Twojej propozycji dostanę jakiś długi ciąg znaków który "nic nie mówi", a w wersji uproszczonej będzie jakiś sprzeczny prosty regexp, wyrażenia regularne będące przecięciami miałyby bowiem służyć do "debugowania" i mają być tworzone aby człowiek mógł je zanalizować i poprawić nachodzące wyrażenia...

zdaję się że teraz problem jest jasny

zgłębiłem trochę temat:
Na podstawie wyrażenia regularnego tworzone są: automaty skończone (FST), które dzielą się na deterministyczne (DFA) i niedeterministyczne (NFA), w przypadku wyrażeń Perl'a zdaje się że generowane są te drugie, jednak można je konwertować między sobą, wg angielskiej wiki DFA można ze sobą przecinać (skoro można konwertować DFA <-> NFA, to rozumiem że konwertować w prosty sposób)..., również na podstawie FST można odtworzyć wyrażenie regularne odpowiadające temu FST

Najkrócej rzecz ujmując na pewno w źródłach PHP są kody które by wystarczyły do rozwiązania problemu....

Znalazłem kod w Python'ie, który teoretycznie powinien robić takie rzeczy: http://www.ics.uci.edu/~eppstein/PADS/Automata.py , próbowałem go przetestować jednak nie działał zgodnie z moimi oczekiwaniami

ściągnąłem więc źródła Perl'a i znalazłem programy w C które mają odpowiadać za kompilację wyrażeń regularnych..., jednak jest to przegląd dzieła 5000 linii na plik (pliki są dwa albo więcej...) kodu poprawianego przez x programistów na przestrzeni ponad 10 lat, z zastrzeżeniem że kod został przepisany tak aby był bardziej wydajny kosztem jego czytelności...
więc przynajmniej chwilowo skapitulowałem...

jeżeli ktoś zna jakieś źródła, które mogłyby mi pomóc byłbym wdzięczny

Ten post edytował zimi 28.07.2008, 23:39:27
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 17:26