Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyrażenia regularne, negacja alternatywy
Capellini
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 16.10.2007

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


Chciałbym żeby jakiś tekst spełniał moje wyrażenie regularne wtedy kiedy zaczyna się od '<' potem następuje coś innego niż 'b', 'i', 'u', 'strong', 'a', a później jest '>'. Przykłady:

Dla: '<div>' zwraca true

Dla: '<b>' zwraca false

Dla: '<body>' zwraca true

Dla: '<strong>' zwraca false

Próbowałem w ten sposób:

<(^(b|a|u|s|i|strong))>

czyli najpierw '<' potem jakiś tekst inny niż 'b', 'i', 'u', 'strong', 'a', a na końcu '>'
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(Capellini @ 8.03.2009, 10:12:15 ) *
czyli najpierw '<' potem jakiś tekst inny niż 'b', 'i', 'u', 'strong', 'a', a na końcu '>'

nie wiem do czego Ci to potrzebne więc wyszukałem tylko te znaczniki które ma znajdować wyrażenie regularne, jeśli jakieś znaczniki co mają być zaczynają się tak samo jak znaczniki co ich ma nie być to w nawiasie (?=body) poprzez wstawienie znaku | i "słowa" dodajesz kolejne wyjątki które mają należeć do wyrażenia.... - dało sie prościej gdyby działały symbole łączone w wyrażeniach - tzn teoretycznie są ale coś u mnie wywala błąd - widać nie obsługuje (więc trochu okrężna drogą ale też działa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ...

ps. w nawiasie (?!b|a|u|strong|i|s) dodajesz te znaki których ma nie być - przy czym skoro strong nie jest na liście wyjątków to tam bez potrzeby został umieszczony ^^ - zawsze przy lub dopasowuje z lewej strony dlatego w pierwszej kolejnosci sprawdza czy jest wyjątek a potem czy nie ma wyjątków....


  1. <?php
  2. $text='Dla: "<div>" zwraca true
  3. Dla: "<b>" zwraca false
  4. Dla: "<body>" zwraca true
  5. Dla: "<strong>" zwraca false';
  6.  
  7. preg_match_all('/<(?:(?=body)|(?!b|a|u|strong|i|s))([^>]+?)>/is', $text, $matches);
  8. echo '<pre>';
  9. print_r($matches);
  10. echo '</pre>';
  11. ?>


Ten post edytował zegarek84 8.03.2009, 18:22:38
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: 11.10.2025 - 23:59