Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] wyrażenia regularne zaprzeczanie
propage
post 5.02.2013, 11:51:51
Post #1





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


wyrażenie [^abc] dopacuje każde wyrażenie, w którym nie wystepuje litera a, b lub c.
Chodzi mi jednak o to, aby ignorowane były wyrażenia, w któryc występuje ten konkretny ciąg znaków "abc", jak to zrobić?
Go to the top of the page
+Quote Post
!*!
post 5.02.2013, 11:58:47
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat
^[abc]


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
propage
post 5.02.2013, 12:17:30
Post #3





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


chce stworzyć wyrażenie, które dopasuje mi to co jest wewnątrz <td>, nawet jeśli w środku <td> jest kod html.
Kod
'/<td>(^[<\/td>]*)<\/td>/s' - nie działa
'/<td>(.*)<\/td>/s' - nie działa
'/<td>([^<]*)<\/td>/s' - działa, ale gdy wewnątrz komórki jest kod html to nie działa z wiadomych przyczyn.

ktoś moze mi z tym pomóc ?

Ten post edytował propage 5.02.2013, 12:24:53
Go to the top of the page
+Quote Post
_Borys_
post 5.02.2013, 13:10:32
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


  1. <?php
  2.  
  3. $h = '
  4. <table>
  5. <tr>
  6. <td>aaa</td>
  7. <td>bbb</td>
  8. <td>ccc</td>
  9. </tr>
  10. <tr>
  11. <td>ddd</td>
  12. <td>eee</td>
  13. <td>fff</td>
  14. </tr>
  15. <tr>
  16. <td>ggg</td>
  17. <td>hhh</td>
  18. <td>iii</td>
  19. </tr>
  20. </table>
  21. ';
  22. $w = preg_match_all('/<td>.*<\/td>/', $h, $m);
  23. echo '<pre>';
  24. print_r($m);
  25. echo '</pre>';
  26.  
  27. ?>
Go to the top of the page
+Quote Post
propage
post 5.02.2013, 14:05:27
Post #5





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


fakt (.*) zadziałało, gdy usunełem modyfikator "/s" jednak po tym zabiegu nie dopasowują się komórki, które mają linie odstępu np.

Kod
<td>ad adas dasd asda
</td>


próbowałem też usunąć znaki nowych lini str_replace("\n", "", $text) i potem dpiero użyć wyrażanie, ale wtedy nie działa żadne dopsowania też nie wiem dlaczego tak się dzieje.


Ten post edytował propage 5.02.2013, 14:41:11
Go to the top of the page
+Quote Post
sowiq
post 5.02.2013, 15:00:40
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


!*!, wyrażenie, które napisałeś, działa zupełnie inaczej - zastosowany w ten sposób modyfikator '^' nie jest negacją tylko wymaga dopasowania wzorca na początku ciągu.

Cytat
Chodzi mi jednak o to, aby ignorowane były wyrażenia, w któryc występuje ten konkretny ciąg znaków "abc", jak to zrobić?

Do takich zadań służy funkcja strpos.
Go to the top of the page
+Quote Post
propage
post 5.02.2013, 16:10:32
Post #7





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


nie ważne, dopsowanie działa po dodaniu \s

'/<td>(.*)\s*<\/td>/'

Ten post edytował propage 5.02.2013, 16:10:53
Go to the top of the page
+Quote Post
Crozin
post 5.02.2013, 16:23:56
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Zacznijmy może od tego, że wyrażenia regularne kompletnie nie nadają się (poza małymi wyjątkami) do parsowania kodu HTML. Skorzystaj z normalnego parsera HTML-a, np. DOM.
Go to the top of the page
+Quote Post
_Borys_
post 5.02.2013, 16:30:20
Post #9





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


Działa nawet bez \s
  1. $h = '
  2. <table>
  3. <tr>
  4. <td>aaa bbb</td>
  5. <td>bbb bbb</td>
  6. <td>ccc <span class = "blabla">ddd ddd</span></td>
  7. </tr>
  8. </table>
  9. ';
  10. $w = preg_match_all('/<td.*?>.*<\/td>/', $h, $m);
  11. echo '<pre>';
  12. print_r($m);
  13. echo '</pre>';

Tylko problem aby zobaczyć inne tagi pomiędzy <td></td> trzeba wyświetlić źródło strony, ale w tablicy jest ok.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:22