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
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Wygląda na to, ze nie zrozumiałem twojego pierwszego postu. Ba - nie rozumiem też ostatniego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
nie chce sprawdzić czy jakiś ciąg znaków spełnia oba wyrażenia regularne, chce wygenerować ciąg znaków który spełnia oba wyrażenia regularne na podstawie tych wyrażeń regularnych

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ć.

Cytat
może powiem co chce osiągnąć... załóżmy że mam zbiór wyrażeń regularnych i chciałbym aby jeśli jedno wyrażenie regularne dopasuję jakiś ciąg to drugie już go nie może dopasować

To znaczy masz jakiś przykładowy tekst i traktujesz go sekwencyjnie tymi wyrażeniami? I chcesz, żeby tekst dopasowany do jakiegoś wyrażenia stawał się niewidoczny dla następnych wyrażeń? No to może wycinaj wszystkie dopasowania z tekstu bazowego zanim zajmie się nim kolejne wyrażenie? To akurat nie byłoby tak ciężko zrobić, ale nie wiem czy będzie pasowało do twojego zamysłu.

Cytat
czyli załóżmy mamy to wspomniane @^a{3,5}$@, @^a{4,6}$@ i nie chcemy sprawdzić czy z góry określone ciągi pasują do obu wyrażeń naraz, ale chcemy np. wygenerować wyrażenie regularne które jest zgodne z jednym i drugim wyrażeniem czyli nasze @^a{4,5}$@

To już masz podane na tacy od samego początku, wystarczyło tylko wyłuskać z mojego kodu:
  1. <?php
  2.  
  3. function combine( $regexp1, $regexp2 )
  4. {
  5. return '@(?(?=' . $regexp1 . ')(?:' . $regexp2 . ')|(?!.*))@';
  6. }
  7.  
  8. echo combine( '^a{3,5}$', '^a{4,6}$' );
  9.  
  10. ?>
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. Są sobie równoważne. Problem może wystąpić wtedy, gdy nie ma się dostępu do pełnego zestawu funkcji wyrażeń perlowych (takich jak dopasowanie warunkowe i przewidywanie). Kolejny problem to:
Cytat
więc mając jakiś zbiór wyrażeń regularnych puszczę ten algorytm na nich aby się dowiedzieć że jakieś 2 wyrażenia mają część wspólną i żeby poprawić jedno z nich tak aby już na siebie nie zachodziły

Wychodzi na to, że ty jeszcze nie wiesz które wyrażenia będziesz musiał ze sobą łączyć. Dopiero algorytm musi znaleźć takie pary wyrażeń, które na siebie zachodzą, a to też pewnie będzie nieźle skomplikowane.
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: 3.10.2025 - 15:23