Zastępowanie znaków w wyrażeniach regularnych w PHP. Wyrażenia regularne PHP. Wykluczone klasy postaci

PHP, jak przystało na nowoczesny język programowania, oferuje programiście zestaw funkcji umożliwiających wykorzystanie wyrażeń regularnych. Można wyszukiwać wystąpienia ciągów w innych ciągach przy użyciu złożonych kryteriów.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Sortuj według Opcja 1 grupuje wyniki wyszukiwania według numeru wyrażenia regularnego (domyślnie). W drugim przypadku wyniki są grupowane według ich położenia w wierszu.

Symbol - element szablonu

Należy pamiętać, że szablon działa na symbolach. Programiści już dawno zapomnieli, czym jest „znakowy” typ danych. Współczesne języki nie schodzą poniżej pojęcia „ciągu”, ale jeśli chodzi o wzór, trzeba zrozumieć: manipuluje się tutaj symbolami.

Budowa szablonu polega przede wszystkim na określeniu wymaganej sekwencji znaków. Jeśli dobrze to zrozumiesz, w szablonie nie będzie błędów. W każdym razie będzie to znacznie mniej.

  • a to specyficzny element szablonu – symbol.
  • a-z to element szablonu, również jeden znak, ale tylko z wartością od a do z - wszystko w języku łacińskim pisane małymi literami.
  • 0-9 to jedna liczba, dowolna liczba, ale 1-3 to tylko 1, 2 lub 3.

Wielkość liter we wzorze jest istotna. Znaczący jest pierwszy i ostatni znak wzoru. Można określić, gdzie zaczyna się i kończy szablon.

Szablon funkcji

PHP preg match all używa standardowej składni wyrażeń regularnych. wskazać jeden ze wskazanych w nich symboli:

  • tylko znaki a, b, c.
  • [^ABC] wszystko oprócz znaków A, B, C.
  • \w i \W - znak tekstowy lub nietekstowy.
  • \s i \S - znak odstępu lub znak niebędący odstępem.
  • \d i \D - cyfra lub niecyfra.

Znaki powtarzające się są oznaczone nawiasami klamrowymi - (n,m) i odnoszą się do poprzedniego znaku.

  • n oznacza powtórzenie „nie mniej niż”;
  • m - powtórzenie „nigdy więcej”.

Składnia zapewnia wiele możliwości tworzenia szablonów, jednak najlepiej zacząć od podstaw, czyli od prostych, napisanych własnoręcznie, w których nie ma skomplikowanych elementów i kombinacji.

Mówiąc najprościej, wymieniając rzeczywiste potrzebne znaki, wskazując ich wymaganą ilość i biorąc pod uwagę, że znak „^” odpowiada początkowi, a „$” końcowi, można tworzyć proste szablony. Analizując prawdziwe, dobrze debugowane wyrażenia regularne od wykwalifikowanych ekspertów, możesz zdobyć solidną wiedzę do tworzenia złożonych aplikacji preg match all. Arsenał PHP nie ogranicza się tylko do tych dwóch funkcji, ale są one najczęściej używane.

Prosta praktyka

Wzór liczb całkowitych:

  • "/*/"

Również wzór liczb całkowitych, ale z przodu może znajdować się znak („+”, „-”), a z przodu/tyłu mogą znajdować się dodatkowe spacje:

  • /^[\s|\+|\-](0,1)*/

Podobnie:

  • /^[\s|\+|\-](0,1)*(\.)*/ - liczba z kropką.
  • /+@+\.(2,3)/ - opcja rozpoznawania wiadomości e-mail.

Wykorzystanie własnych szablonów preg match all, przykładów z Internetu, analiza kodu stron serwisu i innych źródeł pozwala na stworzenie własnej biblioteki szablonów.

Istnieje wiele możliwości wyszukiwania informacji. W szczególności dwie ostatnie podane powyżej konstrukcje można modelować odmiennie. W wielu przypadkach preferowany będzie szablon, który zapewnia szybsze i dokładniejsze dopasowanie. Korzystanie z preg match all w PHP, a także podobnych funkcji w innych językach, wymaga praktyki, uwagi i wstępnego sprawdzenia poprawności szablonów.

W tym artykule przedstawiono wybór przykładów wyrażeń regularnych PHP. Bardzo ładny i użyteczny zbiór przykładów wyrażeń regularnych. Wszystkie przykłady wyrażeń regularnych są dopuszczalne w PHP. Ciesz się tym dla swojego zdrowia!

Przykład weryfikacji nazwy domeny

Ten fragment kodu php sprawdza, czy ciąg znaków jest prawidłową nazwą domeny.

?:.*)+):?(d+)?/?/i", $url)) ( echo "Twój adres URL jest w porządku."; ) else ( echo "Zły adres URL."; )

Przykład podświetlenia słowa w tekście

Bardzo przydatne wyrażenie regularne do wyszukiwania i wyróżniania żądanego słowa w tekście. Kod jest szczególnie przydatny podczas tworzenia wyników wyszukiwania.

$text = "Przykładowe zdanie z KomunitasWeb, regex stało się popularne w programowaniu stron internetowych. Teraz uczymy się wyrażeń regularnych. Według Wikipedii, wyrażenia regularne (w skrócie regex lub regexp, z liczbą mnogą regexs, regexps lub regexen) są zapisywane w formalnym język, który może być interpretowany przez procesor wyrażeń regularnych”; $text = preg_replace("/b(regex)b/i", " 1", $tekst); echo $tekst;

Przykład realizacji podświetlania wyników wyszukiwaniaWordPressa

Otwórz plik search.php i znajdź funkcję_title(). Zastąp go następującym wierszem:

Powtórz $tytuł;

Teraz przed zastąpioną linią wstaw ten kod:

\0", $tytuł); ?>

Zapisz plik search.php i otwórz plik style.css. Dodaj do niego następującą linię:

Fragment silnego wyszukiwania ( tło: żółte; )

Przykład pozyskiwania obrazów zMetoda regexp HTML

Ten fragment kodu PHP wykorzystujący wyrażenia regularne wyszukuje wszystkie obrazy i ich adresy URL.

$obrazy = tablica(); preg_match_all("/(img|src)=("|")[^"">]+/i", $dane, $media); rozbrojony($dane); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data jako $url) ( $info = pathinfo($url); if (isset($info["rozszerzenie"])) ( if (($info["rozszerzenie"] == "jpg") || ($info["rozszerzenie"] == "jpeg") || ($info["rozszerzenie"] == "gif") || ($info["rozszerzenie"] == "png")) array_push($ obrazy, $url);

Usuwanie zduplikowanych słów (wielkość liter nie ma znaczenia)

Czy często słowa się powtarzają? Wtedy ten przykład wyrażenia regularnego będzie dla Ciebie przydatny.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Usuwanie zduplikowanych punktów

To samo, tylko z powtarzającymi się punktami.

$text = preg_replace("/.+/i", ".", $text);

Dopasowanie tagów XML/HTML

Ta prosta funkcja przyjmuje dwa argumenty: znacznik (który chcesz dopasować), kod XML lub kod HTML.

Funkcja get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?)."), $xml, $ dopasowań, PREG_PATTERN_ORDER); zwróć $ dopasowania; )

Wyszukaj tagi XHTML/XML z określonymi wartościami atrybutów

Ten przykład jest podobny do poprzedniej funkcji, tylko możesz znacznie rozszerzyć wyszukiwanie, na przykład znajdź

.

Funkcja get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $wartość = preg_quote($wartość);<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$wartość\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $dopasowania, PREG_PATTERN_ORDER); zwróć $dopasowania; )

Znajdowanie szesnastkowych wartości kolorów

Świetny przykład wyrażenia regularnego dopasowującego szesnastkowe wartości kolorów w podanych ciągach. Po co to? Może chcesz napisać usługę kompresji kodu CSS lub coś podobnego.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "Przykład 6 udany."; )

Wyszukaj przykładtytuł na danej stronie

Ten interesujący przykład kodu PHP z wyrażeniem regularnym wyszukuje i zwraca tekst pomiędzy znacznikami I.

Feof($fp))( $strona .= fgets($fp, 4096); ) $titre = eregi(" (.*)",$strona,$regs); echo $regs; fclose($fp);

Analiza dziennika Apache

Większość witryn działa na dobrze znanych serwerach Apache. Jeśli Twoja witryna również na niej działa, możesz przeanalizować dziennik serwera za pomocą wyrażenia regularnego php.

//Dzienniki: serwer WWW Apache //Udane trafienia tylko do plików HTML. Przydatne do liczenia odsłon strony. "^((?#IP klienta lub nazwa domeny)S+)s+((?#uwierzytelnianie podstawowe)S+s+S+)s+[((?#data i godzina)[^]]+)]s+"(?: GET|POST|HEAD) ((?#plik)/[^ ?]+?.html?)??((?#parametry)[^ ?]+)? HTTP/+"s+(?#kod stanu)200s+((?#przesłane bajty)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#agent użytkownika )[^"]*)"$" //Dzienniki: serwer WWW Apache //tylko błędy 404 "^((?#IP klienta lub nazwa domeny)S+)s+((?#uwierzytelnianie podstawowe)S+s+S+) s+[((?#data i godzina)[^]]+)]s+"(?:GET|POST|HEAD) ((?#plik)[^ ?"]+)??((?#parametry)[ ^?"]+)? HTTP/+"s+(?#kod stanu)404s+((?#przesłane bajty)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#klient użytkownika )[^"]*)"$"

Przykład sprawdzania złożoności hasła

Doskonały przykład wyrażenia regularnego sprawdzającego poziom złożoności hasła. Hasło musi mieć 6 znaków i zawierać co najmniej jedną wielką i małą literę oraz cyfrę.

„A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

Zastępowanie emotikonów tekstowych emotikonami graficznymi

Ten przykładowy kod zmieni emotikonę tekstową na emotikonę graficzną. Ciekawy i przydatny fragment PHP.

$texte="Tekst z buźką:-)"; echo str_replace(":-)"," ",$tekst);

Przykład wyrażenia regularnego, z którego można pobrać obrazyKod HTML

Warto powiedzieć, że ten kod php jest używany w wordpressie do wyszukiwania i przetwarzania obrazów.

Treść postu; $szSearchPattern = "~ ]* />~"; // Uruchom preg_match_all, aby pobrać wszystkie obrazy i zapisać wyniki w $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Sprawdź, czy mamy co najmniej 1 obraz $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // Tutaj możesz przetwarzać swoje obrazy // W tym przykładzie będą one po prostu wyświetlane na monitorze przez ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Mam nadzieję, że ten zbiór przykładów wyrażeń regularnych PHP był dla Ciebie przydatny. Jeśli są ciekawe dodatki lub przykłady wyrażeń regularnych (php), napisz w komentarzach.

Opis funkcji:

Funkcja preg_replace szuka dopasowań wyrażenia regularnego (wzorzec) z danymi w ciągu znaków (temat) i zastępuje je danymi znalezionymi podczas zamiany.

Argument

Opis

wzór

Wymagany argument. Wyrażenie regularne (wzorzec wyszukiwania)

ciąg, tablica

wymiana

Wymagany argument. Ciąg lub tablica zawierająca dane używane do zamiany danych temat

Można także użyć konstrukcji w postaci \$(1) dla łączy, która jest równoważna \$1; tej konstrukcji używa się, jeśli bezpośrednio po łączu następuje liczba (\$(1)1).

ciąg, tablica
temat Wymagany argument. Ciąg lub tablica zawierająca dane, które zostaną zastąpione. ciąg, tablica
limit

Argument opcjonalny. Maksymalna liczba podstawień. Wartość domyślna to -1 (bez ograniczeń)

wew
liczyć

Argument opcjonalny. Zmienna zawierająca liczbę dokonanych zamian.

wew

Funkcji preg_replace() można używać z modyfikatorem /e. Gdy ten modyfikator jest obecny, parametr zamiany jest interpretowany jako kod PHP i następnie używany do zamiany.

Wyrażenia regularne

Osobno powinniśmy rozwodzić się nad wyrażeniami regularnymi, bez zrozumienia których zrozumienie działania funkcji jest dość trudne (jeśli nie niemożliwe) preg_replace().

Dość dobry opis wyrażeń regularnych znajduje się na wikipedia.org, opisano także główne punkty stosowania wyrażeń regularnych

Przykłady:

Przykład 1:

W tym przykładzie wszystkie liczby umieszczone w nawiasach zastąpimy gwiazdkami.

Przykład 2:

W tym przykładzie zastępujemy ciąg odpowiadający całemu wzorowi danymi odpowiadającymi pierwszemu podwzorcowi w odwołaniu \$1. Innymi słowy, „mieć 3 jabłka” odpowiadające „/(\w+) (\d+) (\w+)/” zostanie zastąpione przez „mieć” odpowiadające (\w+).

Przykład 3:

Ten przykład pokazuje, co się stanie, jeśli użyjesz tablic jako wzorca i zamiany.

Przykład 4:

Ten przykład pokazuje, co się stanie, jeśli użyjesz tablic jako wzorca, zamiennika i tematu.

Przykład 5:

Ten przykład pokazuje użycie modyfikatora /e, tj. gdy zamiana jest interpretowana jako kod php. Poniżej znajduje się konwersja znaków z małych na duże.

Przykład 6:

Ten przykład pokazuje użycie argumentu count. Tutaj wynik będzie równy 2, więc były dwie zamiany.

mieszany mecz_preg(wzorzec ciągu, temat ciągu [, tablica &dopasowania [, flagi int [, przesunięcie int]]])

Wyszukuje podany temat tekstu pod kątem dopasowań do wzorca wzorca

Jeżeli podany zostanie parametr dodatkowych dopasowań, zostanie on wypełniony wynikami wyszukiwania. Element $matches będzie zawierał część ciągu pasującą do całego wzorca, element $matches będzie zawierał część ciągu pasującą do pierwszego podwzorca i tak dalej.

flagi mogą przyjmować następujące wartości:

PREG_OFFSET_CAPTURE

Jeśli ta flaga jest podana, dla każdego znalezionego podciągu zostanie wskazana jego pozycja w ciągu źródłowym. Należy pamiętać, że flaga ta zmienia format zwracanych danych: każde wystąpienie jest zwracane jako tablica, której element zerowy zawiera znaleziony podciąg, a pierwszy element zawiera przesunięcie. Ta flaga jest dostępna w PHP 4.3.0 i nowszych.

Dodatkowy parametr flags jest dostępny od PHP 4.3.0.

Wyszukiwanie odbywa się od lewej do prawej, od początku linii. Opcjonalnego parametru przesunięcia można użyć do określenia alternatywnej pozycji początkowej wyszukiwania. Dodatkowy parametr offset jest dostępny od PHP 4.3.3.

Komentarz: Użycie parametru offset nie jest równoznaczne z zastąpieniem dopasowanego ciągu przez substr($temat, $offset) podczas wywoływania funkcji preg_match_all(), ponieważ wzór może zawierać warunki takie jak ^ , $ Lub (? . Porównywać:

Chociaż ten przykład

Funkcjonować preg_match() zwraca liczbę znalezionych dopasowań. Może to być 0 (nie znaleziono żadnych dopasowań) i 1, ponieważ preg_match() przestaje działać po znalezieniu pierwszego dopasowania. Jeśli chcesz znaleźć lub policzyć wszystkie dopasowania, powinieneś skorzystać z tej funkcji preg_match_all(). Funkcjonować preg_match() zwroty FAŁSZ w przypadku wystąpienia błędów podczas wykonywania.

Wskazówka: Nie używaj tej funkcji preg_match(), jeśli chcesz sprawdzić obecność podciągu w danym ciągu. Użyj do tego strpos() Lub strstr(), ponieważ wykonają to zadanie znacznie szybciej.


Przykład 2. Wyszukaj w tekście słowo „sieć”.

/*
Specjalna sekwencja \b we wzorcu oznacza granicę słowa,
dlatego dopasowane będzie tylko pojedyncze wystąpienie słowa „sieć”.
maska, w przeciwieństwie do „pajęczyny” lub „pajęczyny”.
*/
if (preg_match("/\bweb\b/i" , „PHP to preferowany język skryptowy stron internetowych.”)) {
Echo „Znaleziono wpis.”;
) w przeciwnym razie (
Echo „Nie znaleziono wpisu.”;
)preg_match („/\bweb\b/i” , „PHP jest preferowanym językiem skryptowym witryny internetowej.”)) {
Echo „Znaleziono wpis.”;
) w przeciwnym razie (
Echo „Nie znaleziono wpisu.”;
}
?>

Od dawna chciałem zrozumieć wyrażenia regularne. Chociaż „rozmyślić się” to mocne słowo. Aby opanować wielką sztukę zostania mistrzem wyrażeń regularnych, trzeba z nimi stale pracować. Nie wystarczy nauczyć się składni, znaków specjalnych i modyfikatorów – trzeba umieć z nich korzystać. A umiejętność korzystania wiąże się z doświadczeniem.

W tym poście zamieszczę przykłady użycia wyrażeń regularnych, których działanie sam zrozumiałem.

Tabela znaków specjalnych

Specjalny charakter Opis
\ Symbol ucieczki. Przykład: „/seo\/smo/”- pasuje do linii zawierającej seo/smo.
^ Początek symbolu danych. Przykład: „/^seo/”— dopasowuje linię rozpoczynającą się od słowa seo.
$ Koniec symbolu danych. Przykład: „/blog$/”— dopasowuje linię kończącą się słowem blog.
. Dowolny znak inny niż znak nowego wiersza. Przykład: „/seo.ult/”- dopasowuje ciąg seopult, seo9ult, seo@ult itp.
Wewnątrz tych nawiasów znajdują się znaki, z których każdy może pojawić się na danej pozycji, ale tylko jeden. Przykład: „/seult/”— dopasowane zostaną tylko linie zawierające seopult, seokult lub seomult.
| Lub. Przykład poniżej.
() Maska podrzędna.
? Jedno lub zero wystąpień poprzedniego znaku lub wzorca podrzędnego.
* Dowolna liczba wystąpień poprzedzającego znaku lub wzorca podrzędnego. W tym zero.
+ Jedno lub więcej wystąpień.
Przykład: „/se+(op|om)?.*t/”- litera s, następnie jedna lub więcej liter e, po czym kombinacja op lub om może wystąpić raz, a może nie raz, następnie dowolna liczba dowolnych symboli i litera t.
(a, b) Liczba wystąpień poprzedzającego znaku lub wzorca podrzędnego od a do b. Przykład: (0,) - to samo co *, (0,1) - to samo co ?, (3,5) - 3, 4 lub 5 powtórzeń.

Proste przykłady skryptów PHP wykorzystujących wyrażenia regularne:

1) Poprzednie i kolejne wyrażenia.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // znajdź słowo, w którym ing występuje po Boxie. Jeśli słowo zostanie znalezione, funkcja zwróci wartość true; jeśli nie, wartość false.$wzorzec1 = "/Box(?=ing)/" ; preg_match($pattern1, "Dzień Boxa"); // false preg_match ($pattern1, „Boże Narodzenie” ); // PRAWDA // znajdź słowo, które nie ma pola ing po. Jeśli słowo zostanie znalezione, funkcja zwróci wartość true, jeśli nie, false.$pattern2 = "/box(?!ing)/" ; preg_match($pattern2, "Pudełko na iPhone'a i iPada"); // true preg_match ($pattern2, „Co to jest drugi dzień świąt?”); // false preg_match ($pattern2, "css-moz-box-shadow" ); // PRAWDA // znajdź słowo, w którym ing nie jest poprzedzone ramką. Jeśli słowo zostanie znalezione, funkcja zwróci wartość true, jeśli nie, false.$ wzór3 = "/(?

[^<]+?~","blog seo",$text); echo $text; ?>

3) Uzyskaj i wyświetl wartość Alexa Rank danej witryny.

1 2 3 4 5 6 7 8 9 "#
(.*?)
#si", plik_get_contents ( „http://www.alexa.com/siteinfo/($url)”) , $a ) ; return trim (str_replace („”, „, „”, strip_tags ($a [ 1 ])) ); ) $alexa = alexa($url) ; echo $aleksa; ?>

(.*?)

#si", file_get_contents("http://www.alexa.com/siteinfo/($url)"), $a); return trim(str_replace(",","",strip_tags($a))); ) $alexa = alexa($url); echo $alexa;

4) Pobierz i wyświetl tytuł strony.

1 2 3 4 5 (.*)<\/title>/s", $str, $m); echo $m [ 1 ] ; ?>

(.*)<\/title>/s", $str, $m); echo $m; ?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 \n \r \t ]/", "" , $treść ); // zamień znaki nowej linii i tabulacji na spacje$treść = preg_replace ("/(2,)/" , " " , $treść ) ; // zamień więcej niż 2 spacje na jedną preg_match_all("/ ]*href=(?:"| \" )(.*)(?:"|\" )[^<>]*>(.*)<\/a>/iU”, $treść , $linki ) ; // zbierz linki if (sizeof ($links [ 1 ] ) > 0 ) // jeśli zostaną znalezione linki( $wyjście = tablica (); // tablica linków zewnętrznych foreach ($links [ 1 ] as $v ) ( if (preg_match („/http:\/\/(www\.)(0,1)” . $domena . „/i”, $v ) ) // usuń linki wewnętrzne(kontynuuj;) if ( preg_match ( "/(http:|https:)?\/\/(www\.)(0,1)(.*)/i", $v) ) // zewnętrzne odniesienia( $wyjście = $v; )) return $wyjście; ) zwróć tablicę () ; ) $domena = "strona" ; $content = file_get_contents („http://site/” ); $getoutlinks = getoutlinks($treść, $domena) ; dla ($i = 0; $i<= count ($getoutlinks ) ; $i ++ ) { echo $getoutlinks [ $i ] . "
" ; } ?>

]*href=(?:"|\")(.*)(?:"|\")[^<>]*>(.*)<\/a>/iU", $content, $links); // zbierz linki if (sizeof($links) > 0) // jeśli zostaną znalezione linki ( $out = array(); // tablica linków zewnętrznych foreach ($links as $v ) ( if (preg_match("/http:\/\/(www\.)(0,1)".$domain."/i", $v)) // usuń linki wewnętrzne (kontynuuj; ) if (preg_match („/(http:|https:)?\/\/(www\.)(0,1)(..com/”); $getoutlinks = getoutlinks($treść, $domena); for ( $i = 0;<= count($getoutlinks); $i++) { echo $getoutlinks[$i]."
"; } ?>

Gdzie:
preg_replace— Wykonuje wyszukiwanie i zamianę przy użyciu wyrażenia regularnego.
mecz_preg— sprawdza wyrażenie regularne.
preg_match_all— znajduje wszystkie dopasowania, podczas gdy preg_match znajduje tylko pierwsze.
plik_get_zawartość— pobierz zawartość pliku w jednej linii.
przycinać— usuwa spacje na początku i na końcu linii.
str_replace— zastępuje szukany ciąg ciągiem zastępczym.
strip_tags— usuwa znaczniki HTML i php z ciągu znaków.
rozmiar— pobiera liczbę elementów zmiennej.
liczyć— zlicza liczbę elementów tablicy lub liczbę właściwości obiektu.