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%)
-----


Widzę że nie rozumiesz tego kodu. Ba, nawet sobie trudu nie zadałeś, żeby sprawdzić jak działa. Jeden rzut okiem i "wiem najlepiej".


No to może inny przykład. Wszystko zostało zmienione oprócz wyrażenia regularnego w taki sposób, żeby nie przypominało już brute force-a:
  1. <?php
  2.  
  3. $reg1 = '^a{3,5}$';
  4. $reg2 = '^a{4,6}$';
  5.  
  6.  
  7. // Test pierwszy
  8. echo '1. "a" nie pasuje do żadnego wzorca.<br>Test wyrażenia: ';
  9. preg_match( '@(?(?=' . $reg1 . ')(?:' . $reg2 . ')|)@', 'a', $matches );
  10. if( empty( $matches[0] ) )
  11. {
  12. echo 'nie dopasowano';
  13. }
  14. else
  15. {
  16. echo 'dopasowano "' . $matches[0] . '"';
  17. }
  18. echo '<br><br>';
  19.  
  20.  
  21. // Test drugi
  22. echo '2. "sdgsdgsdgsdgsdf" nie pasuje do żadnego wzorca.<br>Test wyrażenia: ';
  23. preg_match( '@(?(?=' . $reg1 . ')(?:' . $reg2 . ')|)@', 'sdgsdgsdgsdgsdf', $matches );
  24. if( empty( $matches[0] ) )
  25. {
  26. echo 'nie dopasowano';
  27. }
  28. else
  29. {
  30. echo 'dopasowano "' . $matches[0] . '"';
  31. }
  32. echo '<br><br>';
  33.  
  34.  
  35. // Test trzeci
  36. echo '3. "aaa" pasuje do pierwszego wzorca, ale nie pasuje do drugiego.<br>Test wyrażenia: ';
  37. preg_match( '@(?(?=' . $reg1 . ')(?:' . $reg2 . ')|)@', 'aaa', $matches );
  38. if( empty( $matches[0] ) )
  39. {
  40. echo 'nie dopasowano';
  41. }
  42. else
  43. {
  44. echo 'dopasowano "' . $matches[0] . '"';
  45. }
  46. echo '<br><br>';
  47.  
  48.  
  49. // Test czwarty
  50. echo '4. "aaaaaa" pasuje do drugiego wzorca wzorca, ale nie pasuje do pierwszego.<br>Test wyrażenia: ';
  51. preg_match( '@(?(?=' . $reg1 . ')(?:' . $reg2 . ')|)@', 'aaaaaa', $matches );
  52. if( empty( $matches[0] ) )
  53. {
  54. echo 'nie dopasowano';
  55. }
  56. else
  57. {
  58. echo 'dopasowano "' . $matches[0] . '"';
  59. }
  60. echo '<br><br>';
  61.  
  62.  
  63. // Test piąty
  64. echo '5. "aaaa" pasuje do obu wzorców.<br>Test wyrażenia: ';
  65. preg_match( '@(?(?=' . $reg1 . ')(?:' . $reg2 . ')|)@', 'aaaa', $matches );
  66. if( empty( $matches[0] ) )
  67. {
  68. echo 'nie dopasowano';
  69. }
  70. else
  71. {
  72. echo 'dopasowano "' . $matches[0] . '"';
  73. }
  74. echo '<br><br>';
  75.  
  76.  
  77. // Test szósty
  78. echo '6. "aaaaa" pasuje do obu wzorców.<br>Test wyrażenia: ';
  79. preg_match( '@(?(?=' . $reg1 . ')(?:' . $reg2 . ')|)@', 'aaaaa', $matches );
  80. if( empty( $matches[0] ) )
  81. {
  82. echo 'nie dopasowano';
  83. }
  84. else
  85. {
  86. echo 'dopasowano "' . $matches[0] . '"';
  87. }
  88. echo '<br><br>';
  89.  
  90.  
  91. // Test siódmy
  92. echo '7. "aaaaaaaaaaaaaaaaaaaaa" nie pasuje do żadnego wzorca.<br>Test wyrażenia: ';
  93. preg_match( '@(?(?=' . $reg1 . ')(?:' . $reg2 . ')|)@', 'aaaaaaaaaaaaaaaaaaaaa', $matches );
  94. if( empty( $matches[0] ) )
  95. {
  96. echo 'nie dopasowano';
  97. }
  98. else
  99. {
  100. echo 'dopasowano "' . $matches[0] . '"';
  101. }
  102. echo '<br><br>';
  103.  
  104.  
  105. ?>



[EDIT]
PS.
Cytat
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...

Nie wiem dlaczego wcześniej tego nie zauważyłem. W takim razie wystarczy zwykłe:
  1. <?php
  2.  
  3. if( preg_match( 'WZORZEC1', $zmienna ) && preg_match( 'WZORZEC2', $zmienna ) )
  4. {
  5. echo 'pasuje do obu';
  6. }
  7.  
  8. ?>


Ten post edytował Kicok 25.07.2008, 16:55:54
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: 6.10.2025 - 13:33