Regularni izrazi php zamjena karaktera. PHP regularni izrazi. Izuzete klase znakova

PHP, kako i priliči modernom programskom jeziku, nudi programeru skup funkcija za korištenje regularnih izraza. Možete tražiti pojavljivanja nizova u drugim nizovima koristeći složene kriterije.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Sortiraj prema opciji 1 grupira rezultate pretrage prema broju regularnog izraza (podrazumevano). U drugom slučaju, rezultati su grupirani prema njihovoj lokaciji u redu.

Simbol - element predloška

Važno je zapamtiti da predložak radi na simbolima. Programiranje je odavno zaboravilo šta je "karakterni" tip podataka. Moderni jezici ne idu ispod koncepta "niza", ali što se tiče uzorka, morate razumjeti: ovdje se manipulira simbolima.

Izrada šablona je, prije svega, specificiranje potrebnog niza znakova. Ako ovo jasno razumijete, tada u predlošku neće biti grešaka. U svakom slučaju, biće mnogo manje.

  • a je specifičan element šablona - simbol.
  • a-z je element šablona, ​​također jedan znak, ali samo sa vrijednošću od a do z - sve latinice malim slovima.
  • 0-9 je jedan broj, bilo koji broj, ali 1-3 je samo 1, 2 ili 3.

Važan je slučaj u uzorku. Prvi i posljednji lik obrasca su značajni. Možete odrediti gdje šablon počinje i gdje se završava.

Predložak funkcije

PHP preg match all koristi standardnu ​​sintaksu regularnog izraza. označite jedan od simbola navedenih u njima:

  • samo znakovi a, b, c.
  • [^ABC] sve osim znakova A, B, C.
  • \w i \W - tekstualni ili netekstualni znak.
  • \s i \S - razmak ili znak bez razmaka.
  • \d i \D - cifre ili necifre.

Znakovi koji se ponavljaju označeni su vitičastim zagradama - (n,m) i odnose se na prethodni znak.

  • n označava ponavljanje "ne manje od";
  • m - ponavljanje "ne više".

Sintaksa pruža mnoge mogućnosti za kreiranje predložaka, ali najbolje je početi s osnovama, odnosno jednostavnim napisanim vlastitom rukom, u kojima nema složenih elemenata i kombinacija.

Jednostavno rečeno, navođenjem pravih znakova koji su potrebni, navođenjem njihove potrebne količine i uzimajući u obzir da znak “^” odgovara početku, a “$” kraju reda, možete kreirati jednostavne šablone. Analizom stvarnih, dobro otklonjenih regularnih izraza od kvalifikovanih stručnjaka, možete steći solidno znanje za kreiranje složenih aplikacija preg match all. PHP-ov arsenal nije ograničen samo na ove dvije funkcije, već se one najčešće koriste.

Jednostavna praksa

Cjelobrojni uzorak:

  • "/*/"

Također cjelobrojni uzorak, ali ispred može biti znak ("+", "-"), a može biti i dodatnih razmaka sprijeda/pozadi:

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

Isto tako:

  • /^[\s|\+|\-](0,1)*(\.)*/ - broj sa tačkom.
  • /+@+\.(2,3)/ - opcija za prepoznavanje e-pošte.

Korištenje vlastitih predložaka za preg match all, primjeri istih na Internetu, analiza koda web stranica i drugih izvora omogućava vam da kreirate vlastitu biblioteku šablona.

Postoji mnogo opcija za pronalaženje informacija. Konkretno, posljednje dvije gore navedene konstrukcije mogu se drugačije modelirati. U mnogim slučajevima, prednost će se dati predlošku koji brže i preciznije pruža željeno podudaranje. Korišćenje preg match all u PHP-u, kao i sličnih funkcija u drugim jezicima, zahteva vežbu, pažnju i preliminarnu proveru ispravnosti šablona.

Ovaj članak pruža izbor primjera php regularnih izraza. Vrlo lijepa i korisna zbirka primjera regularnih izraza. Svi primjeri regularnih izraza su prihvatljivi za PHP. Uživajte za svoje zdravlje!

Primjer provjere imena domene

Ovaj php isječak provjerava da li je string ispravan naziv domene.

?:.*)+):?(d+)?/?/i", $url)) ( echo "Vaš URL je u redu."; ) else ( echo "Pogrešan URL."; )

Primjer isticanja riječi u tekstu

Vrlo koristan regularni izraz za pretraživanje i isticanje željene riječi u tekstu. Kod je posebno koristan pri kreiranju izlaznih rezultata pretraživanja.

$text = "Primjer rečenice sa KomunitasWeb-a, regex je postao popularan u web programiranju. Sada učimo regex. Prema wikipediji, regularni izrazi (skraćeno kao regex ili regexp, sa oblicima za množinu regexes, regexps ili regexen) su napisani u formalnom obliku jezik koji se može interpretirati pomoću procesora regularnih izraza"; $text = preg_replace("/b(regex)b/i", " 1", $text); echo $text;

Primjer implementacije isticanja rezultata pretraživanjaWordPress

Otvorite datoteku search.php i pronađite funkciju_title(). Zamijenite ga sljedećom linijom:

Echo $title;

Sada, prije zamijenjene linije, umetnite ovaj kod:

\0", $title); ?>

Sačuvajte datoteku search.php i otvorite style.css. Dodajte mu sljedeću liniju:

Strong.search-excerpt (pozadina: žuta; )

Primjer dobijanja slika izMetoda HTML regularnog izraza

Ovaj dio PHP koda koji koristi regularne izraze traži sve slike i njihov url.

$images = niz(); preg_match_all("/(img|src)=("|")[^"">]+/i", $data, $media); unset($data); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data kao $url) ( $info = pathinfo($url); if (isset($info["extension"])) ( if (($info["extension"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($ slike, $url); ) )

Uklanjanje duplikata riječi (neosjetljivo na velika i mala slova)

Postoje li često riječi koje se ponavljaju? Onda će vam ovaj primjer regularnog izraza biti od koristi.

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

Uklanjanje duplih tačaka

Ista stvar, samo sa ponavljanjem tačaka.

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

Podudaranje XML/HTML oznaka

Ova jednostavna funkcija uzima dva argumenta: oznaku (koju želite da uskladite), xml ili html kod.

Funkcija get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $podudaranja, PREG_PATTERN_ORDER); return $matches; )

Potražite XHTML/XML oznake sa određenim vrijednostima atributa

Ovaj primjer je sličan prethodnoj funkciji, samo što možete značajno proširiti pretragu, na primjer find

.

Funkcija get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; inače $tag = preg_quote($tag); $attr = preg_quote($ attr); $value = preg_quote($value); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches; )

Pronalaženje heksadecimalnih vrijednosti boja

Sjajan primjer regularnog izraza koji odgovara heksadecimalnim vrijednostima boja u datim stringovima. čemu ovo služi? Možda želite da napišete uslugu kompresije CSS koda ili nešto slično.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "primjer 6 uspješan."; )

Primjer pretragenaslov na datoj stranici

Ovaj zanimljiv primjer PHP koda sa regexp-om pronalazi i vraća tekst između oznaka I.

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

Apache raščlanjivanje dnevnika

Većina web lokacija radi na poznatim Apache serverima. Ako vaša stranica također radi na njoj, onda možete raščlaniti serverski dnevnik koristeći php regexp.

//Evidencije: Apache web server //Uspješno učitavanje samo HTML datoteka. Korisno za brojanje pregleda stranice. "^((?#IP klijent ili ime domene)S+)s+((?#basic authentication)S+s+S+)s+[((?#datum i vrijeme)[^]]+)]s+"(?: GET|POST|HEAD) ((?#file)/[^ ?]+?.html?)??((?#parameters)[^ ?]+)? HTTP/+"s+(?#status code)200s+((?#bajtovi prebačeni)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#korisnički agent )[^"]*)"$" //Evidencije: Apache web server //404 greške samo "^((?#Client IP ili naziv domene)S+)s+((?#basic authentication)S+s+S+) s+[((?#datum i vrijeme)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[ ^ ?"]+)? HTTP/+"s+(?#status code)404s+((?#bajtovi prebačeni)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#korisnički agent )[^"]*)"$"

Primjer provjere složenosti lozinke

Odličan primjer regularnog izraza koji provjerava nivo složenosti lozinke. Lozinka mora biti duga 6 znakova i sadržavati najmanje jedno veliko slovo, malo slovo i broj.

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

Zamjena tekstualnih emotikona grafičkim emotikonima

Ovaj primjer koda će promijeniti tekstualni emotikon u vaš grafički. Zanimljiv i koristan PHP isječak.

$texte="Tekst sa smajlijem:-)"; echo str_replace(":-)"," ",$texte);

Primjer regularnog izraza za dobivanje slikahtml kod

Vrijedi reći da se ovaj php kod koristi u wordpressu za pretraživanje i obradu slika.

post_content; $szSearchPattern = "~ ]* />~"; // Pokrenite preg_match_all da zgrabite sve slike i sačuvate rezultate u $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Provjerite imamo li barem 1 sliku $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // Ovdje možete obraditi svoje slike // U ovom primjeru one će jednostavno biti prikazane na monitoru za ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Nadam se da vam je ova kolekcija primjera php regexp-a bila korisna. Ako ima zanimljivih dodataka ili primjera regularnih izraza (php), pišite u komentarima.

Opis funkcije:

Funkcija preg_replace traži podudaranja regularnog izraza (obrazac) s podacima u nizu (predmet) i zamjenjuje ih podacima pronađenim u zamjeni.

Argument

Opis

uzorak

Potreban argument. Regularni izraz (uzorak pretraživanja)

niz, niz

zamjena

Potreban argument. Niz ili niz koji sadrži podatke koji se koriste za zamjenu podataka u predmet

Takođe možete koristiti konstrukciju oblika \$(1) za veze, što je ekvivalentno \$1; ova konstrukcija se koristi ako vezu odmah prati broj (\$(1)1).

niz, niz
predmet Potreban argument. Niz ili niz koji sadrži podatke koji će biti zamijenjeni. niz, niz
limit

Opcioni argument. Maksimalan broj zamjena. Zadano je -1 (neograničeno)

int
count

Opcioni argument. Varijabla koja sadrži broj izvršenih zamjena.

int

Funkcija preg_replace() može se koristiti sa /e modifikatorom. Kada je ovaj modifikator prisutan, parametar zamjene se tumači kao PHP kod i zatim se koristi za zamjenu.

Regularni izrazi

Odvojeno, treba se zadržati na regularnim izrazima, bez razumijevanja kojih je prilično teško (ako ne i nemoguće) razumjeti rad funkcije preg_replace().

Prilično dobar opis regularnih izraza je dat na wikipedia.org, opisane su i glavne tačke upotrebe regularnih izraza

primjeri:

Primjer 1:

U ovom primjeru sve brojeve stavljene u zagrade zamjenjujemo zvjezdicama.

Primjer 2:

U ovom primjeru zamjenjujemo niz koji odgovara cijelom uzorku podacima koji odgovaraju prvom poduzorku na referenci \$1. Drugim riječima, "imati 3 jabuke" koje odgovara "/(\w+) (\d+) (\w+)/" bit će zamijenjeno sa "imati" koje odgovara (\w+).

Primjer 3:

Ovaj primjer pokazuje šta se događa ako koristite nizove kao uzorak i zamjenu.

Primjer 4:

Ovaj primjer pokazuje šta se dešava ako koristite nizove kao obrazac, zamjenu i subjekt.

Primjer 5:

Ovaj primjer pokazuje upotrebu modifikatora /e, tj. kada se zamjena tumači kao php kod. Ispod je konverzija znakova iz malih u velika slova.

Primjer 6:

Ovaj primjer pokazuje upotrebu argumenta count. Ovdje će rezultat biti jednak 2, tako da su bile dvije zamjene.

mješovito preg_match(uzorak niza, subjekat niza [, niz & odgovara [, int zastavice [, int offset]]])

Pretražuje datu temu teksta radi podudaranja sa uzorkom

Ako je naveden dodatni parametar podudaranja, on će biti popunjen rezultatima pretraživanja. Element $matches će sadržavati dio niza koji odgovara cijelom uzorku, $matches će sadržavati dio niza koji odgovara prvom poduzorku, i tako dalje.

zastavice mogu imati sljedeće vrijednosti:

PREG_OFFSET_CAPTURE

Ako je navedena zastavica, za svaki pronađeni podniz će biti naznačena njegova pozicija u izvornom nizu. Važno je zapamtiti da ova zastavica mijenja format vraćenih podataka: svako pojavljivanje se vraća kao niz, čiji nulti element sadrži pronađeni podniz, a prvi element sadrži pomak. Ova zastavica je dostupna u PHP 4.3.0 i novijim verzijama.

Dodatni parametar flags je dostupan od PHP 4.3.0.

Pretraga se vrši s lijeva na desno, od početka reda. Opcijski parametar pomaka može se koristiti za određivanje alternativne početne pozicije za pretragu. Dodatni parametar pomaka dostupan je od PHP 4.3.3.

komentar: Upotreba parametra offset nije ekvivalentna zamjeni podudarnog niza sa substr($subject, $offset) prilikom pozivanja funkcije preg_match_all(), budući da obrazac može sadržavati uslove kao što su ^ , $ ili (? . uporedi:

Dok ovaj primjer

Funkcija preg_match() vraća broj pronađenih podudaranja. Može biti 0 (nije pronađeno podudaranje) i 1 jer preg_match() prestaje raditi nakon prvog pronađenog podudaranja. Ako trebate pronaći ili prebrojati sva podudaranja, trebali biste koristiti funkciju preg_match_all(). Funkcija preg_match() vraća FALSE u slučaju da dođe do bilo kakve greške tokom izvršenja.

trag: Nemojte koristiti funkciju preg_match(), ako trebate provjeriti prisustvo podniza u datom nizu. Koristite za ovo strpos() ili strstr(), jer će ovaj zadatak obaviti mnogo brže.


Primjer 2. Potražite riječ "web" u tekstu

/*
Posebna sekvenca \b u obrascu znači granicu riječi,
stoga će se podudarati samo izolirana pojava riječi "web".
maska, za razliku od "mreža" ili "paučine".
*/
if (preg_match("/\bweb\b/i" , "PHP je jezik za web skripte po izboru.")) {
echo "Unos pronađen.";
) drugo (
echo "Unos nije pronađen.";
)preg_match ("/\bweb\b/i" , "PHP je jezik za skriptiranje web stranice po izboru.")) {
echo "Unos pronađen.";
) drugo (
echo "Unos nije pronađen.";
}
?>

Već duže vrijeme želim razumjeti regularne izraze. Iako je "shvatiti" jaka riječ. Da biste savladali veliku umjetnost postati majstor regularnih izraza, morate stalno raditi s njima. Nije dovoljno naučiti sintaksu, posebne znakove i modifikatore - morate ih moći koristiti. A sposobnost korištenja dolazi s iskustvom.

U ovom postu ću objaviti primjere korištenja regularnih izraza, čiji sam rad i sam razumio.

Tabela specijalnih znakova

Poseban karakter Opis
\ Escape simbol. primjer: '/seo\/smo/'- odgovara liniji koja sadrži seo/smo.
^ Početak simbola podataka. primjer: ‘/^seo/’— odgovara redu koji počinje riječju seo.
$ Simbol kraja podataka. primjer: '/blog$/'— odgovara redu koji se završava riječju blog.
. Bilo koji znak osim prijevoda reda. primjer: ‘/seo.ult/’- odgovara nizu seopult, seo9ult, seo@ult, itd.
Unutar ovih zagrada su navedeni znakovi, od kojih se bilo koji može pojaviti na datom mjestu, ali samo jedan. primjer: '/seoult/'— samo linije koje sadrže seopult, seokult ili seomult će se podudarati.
| Or. Primjer ispod.
() Podmaska.
? Jedno ili nula pojavljivanja prethodnog znaka ili podobraska.
* Bilo koji broj pojavljivanja prethodnog znaka ili podobraska. Uključujući nulu.
+ Jedno ili više pojavljivanja.
primjer: ‘/se+(op|om)?.*t/’- slovo s, zatim jedno ili više slova e, nakon čega se kombinacija op ili om može pojaviti jednom, a možda i ne jednom, zatim bilo koji broj bilo kojeg simbola i slovo t.
(a,b) Broj pojavljivanja prethodnog znaka ili podobrazca od a do b. Primjer: (0,) - isto kao *, (0,1) - isto kao ?, (3,5) - 3, 4 ili 5 ponavljanja.

Jednostavni primjeri PHP skripti koje koriste regularne izraze:

1) Prethodni i naredni izrazi.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // pronalazimo riječ u kojoj ing dolazi nakon Box. Ako je riječ pronađena, funkcija će vratiti true, ako ne, false.$pattern1 = "/Box(?=ing)/" ; preg_match($pattern1, "Dan kutije"); // false preg_match ($pattern1, "Boxing Day" ) ; // istinito // pronalazimo riječ koja nema ing iza okvira. Ako je riječ pronađena, funkcija će vratiti true, ako ne, false.$pattern2 = "/box(?!ing)/" ; preg_match($pattern2, "Kutija za iPhone i iPad"); // true preg_match ($pattern2, "Šta je dan boksa?") ; // lažno preg_match ($pattern2, "css-moz-box-shadow" ) ; // istinito // pronalazimo riječ u kojoj ne prethodi box. Ako je riječ pronađena, funkcija će vratiti true, ako ne, false.$pattern3 = "/(?

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

3) Dobijte i prikažite Alexa Rank vrijednost date stranice.

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

(.*?)

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

4) Uzmite i prikažite naslov stranice.

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

(.*)<\/title>/s", $str, $m); eho $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 ]/", "" , $content ) ; // zamjenjuje znakove novog reda i tabulatora razmacima$content = preg_replace ("/(2,)/" , " " , $content ) ; // zamijeniti više od 2 razmaka jednim preg_match_all("/ ]*href=(?:"| \" )(.*)(?:"|\" )[^<>]*>(.*)<\/a>/iU", $content, $links); // prikuplja linkove if (sizeof ($links [1]) > 0) // ako se pronađu linkovi( $out = niz () ; // niz vanjskih veza foreach ($links [ 1 ] kao $v ) ( if (preg_match ("/http:\/\/(www\.)(0,1)" . $domain . "/i" , $v ) ) // izbaciti interne veze( nastavi ; ) if ( preg_match ( "/(http:|https:)?\/\/(www\.)(0,1)(.*)/i", $v ) ) // vanjska referenca( $out = $v ;) ) return $out; ) vratiti niz () ; ) $domain = "site" ; $content = file_get_contents ("http://site/") ; $getoutlinks = getoutlinks($content, $domain) ; za ($i = 0; $i<= count ($getoutlinks ) ; $i ++ ) { echo $getoutlinks [ $i ] . "
" ; } ?>

]*href=(?:"|\")(.*)(?:"|\")[^<>]*>(.*)<\/a>/iU", $content, $links); // prikuplja linkove if (sizeof($links) > 0) // ako su linkovi pronađeni ( $out = array(); // niz vanjskih veza za svaki ($links kao $v ) ( if (preg_match("/http:\/\/(www\.)(0,1)".$domain."/i", $v)) // ukloni interne veze (nastavi;) if (preg_match ("/(http:|https:)?\/\/(www\.)(0,1)(..com/"); $getoutlinks = getoutlinks($content, $domain); for ( $i = 0;$i<= count($getoutlinks); $i++) { echo $getoutlinks[$i]."
"; } ?>

gdje:
preg_replace— Obavlja pretragu i zamjenu koristeći regularni izraz.
preg_match— vrši provjeru regularnog izraza.
preg_match_all— pronalazi sva podudaranja, dok preg_match pronalazi samo prvu.
file_get_contents— dobiti sadržaj datoteke u jednom redu.
podrezati— uklanja razmake na početku i na kraju reda.
str_replace— zamjenjuje string za pretragu zamjenskim nizom.
strip_tags— uklanja html i php oznake iz stringa.
sizeof— dobija broj elemenata u varijabli.
count— broji broj elemenata niza ili broj svojstava objekta.