Regulære uttrykk php tegnerstatning. PHP regulære uttrykk. Ekskluderte karakterklasser

PHP, som det sømmer seg et moderne programmeringsspråk, tilbyr utvikleren et sett med funksjoner for bruk av regulære uttrykk. Du kan søke etter forekomster av strenger i andre strenger ved å bruke komplekse kriterier.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Sorter etter Alternativ 1 grupperer søkeresultatene etter regulære uttrykksnummer (standard). I det andre tilfellet grupperes resultatene etter deres plassering i raden.

Symbol - malelement

Det er viktig å huske at malen opererer på symboler. Programmering har for lengst glemt hva datatypen "karakter" er. Moderne språk går ikke under konseptet med en "streng", men med hensyn til mønsteret må du forstå: symboler manipuleres her.

Å bygge en mal er først og fremst å spesifisere den nødvendige sekvensen av tegn. Hvis du forstår dette tydelig, vil det ikke være noen feil i malen. Det blir uansett mye mindre.

  • a er et spesifikt element i malen - et symbol.
  • a-z er et malelement, også ett tegn, men bare med verdien fra a til z - alt latinsk med små bokstaver.
  • 0-9 er ett tall, et hvilket som helst tall, men 1-3 er bare 1, 2 eller 3.

Sak i mønsteret er viktig. De første og siste tegnene i mønsteret er viktige. Du kan angi hvor malen begynner og slutter.

Funksjonsmal

PHP preg match all bruker standard syntaks for regulære uttrykk. angi et av symbolene som er angitt i dem:

  • bare tegnene a, b, c.
  • [^ABC] alt bortsett fra tegnene A, B, C.
  • \w og \W - tekst eller ikke-teksttegn.
  • \s og \S - mellomrom eller ikke-mellomrom.
  • \d og \D - siffer eller ikke-siffer.

Gjentatte tegn er indikert med krøllete klammeparenteser - (n,m) og refererer til forrige tegn.

  • n angir repetisjon av "ikke mindre enn";
  • m - repetisjon av "ikke mer".

Syntaksen gir mange alternativer for å lage maler, men det er best å starte med det grunnleggende, det vil si med enkle skrevet i egen hånd, der komplekse elementer og kombinasjoner er fraværende.

Enkelt sagt, ved å liste opp de virkelige tegnene som trengs, angi antall nødvendige, og ta i betraktning at "^"-tegnet tilsvarer begynnelsen og "$" til slutten av linjen, kan du lage enkle maler. Ved å analysere ekte, godt feilsøkte regulære uttrykk fra kvalifiserte eksperter, kan du få solid kunnskap for å lage komplekse applikasjoner av preg match all. PHPs arsenal er ikke begrenset til bare disse to funksjonene, men de er de mest brukte.

Enkel praksis

Heltallsmønster:

  • "/*/"

Også et heltallsmønster, men det kan være et tegn foran ("+", "-"), og det kan være ekstra mellomrom foran/bak:

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

Like måte:

  • /^[\s|\+|\-](0,1)*(\.)*/ - et tall med en prikk.
  • /+@+\.(2,3)/ - alternativ for e-postgjenkjenning.

Ved å bruke dine egne maler for preg match all, eksempler på dem på Internett, analysere koden til nettsider og andre kilder kan du lage ditt eget bibliotek med maler.

Det er mange alternativer for å finne informasjon. Spesielt de to siste konstruksjonene gitt ovenfor kan modelleres annerledes. I mange tilfeller vil malen foretrekkes som gir ønsket match raskere og mer nøyaktig. Å bruke preg match all i PHP, samt lignende funksjoner på andre språk, krever øvelse, oppmerksomhet og foreløpig kontroll av malenes korrekthet.

Denne artikkelen gir et utvalg av php regexp eksempler. En veldig fin og nyttig samling av eksempler på regulære uttrykk. Alle eksempler på regulære uttrykk er akseptable for PHP. Nyt det for helsen din!

Eksempel på bekreftelse av domenenavn

Denne php-kodebiten sjekker om strengen er et gyldig domenenavn.

?:.*)+):?(d+)?/?/i", $url)) ( ekko "Din url er ok."; ) else ( ekko "Feil url."; )

Eksempel på utheving av et ord i tekst

Et veldig nyttig regulært uttrykk for å søke og fremheve ønsket ord i teksten. Koden er spesielt nyttig når du lager søkeresultatutdata.

$text = "Eksempelsetning fra KomunitasWeb, regex har blitt populært innen nettprogrammering. Nå lærer vi regex. I følge wikipedia er regulære uttrykk (forkortet som regex eller regexp, med flertallsformer regexs, regexps eller regexen) skrevet i en formell språk som kan tolkes av en prosessor for regulære uttrykk"; $text = preg_replace("/b(regex)b/i", " 1", $tekst); ekko $tekst;

Et eksempel på implementering av fremheving av søkeresultaterWordPress

Åpne search.php-filen og finn funksjonen_title(). Erstatt den med følgende linje:

Ekko $tittel;

Nå, før den erstattede linjen, sett inn denne koden:

\0", $tittel); ?>

Lagre search.php-filen din og åpne style.css. Legg til følgende linje:

Strong.search-excerpt ( bakgrunn: gul; )

Et eksempel på innhenting av bilder fraHTML regexp metode

Denne delen av PHP-kode som bruker regulære uttrykk, søker etter alle bilder og deres url.

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

Fjerning av dupliserte ord (uavhengig av store og små bokstaver)

Er det ofte ord som gjentas? Da vil dette regulære uttrykkseksemplet være nyttig for deg.

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

Fjerner dupliserte punkter

Det samme, bare med gjentakende poeng.

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

Matching av XML/HTML-tag

Denne enkle funksjonen tar to argumenter: en tag (som du vil matche), xml eller html-kode.

Funksjon get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $matches, PREG_PATTERN_ORDER); returner $treff; )

Søk etter XHTML/XML-tagger med spesifikke attributtverdier

Dette eksemplet ligner på den forrige funksjonen, bare du kan utvide søket betydelig, for eksempel finne

.

Funksjonen get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; ellers $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; )

Finne heksadesimale fargeverdier

Et flott eksempel på et regulært uttrykk som matcher heksadesimale fargeverdier i gitte strenger. Hva brukes dette til? Kanskje du vil skrive en CSS-kodekomprimeringstjeneste, eller noe lignende.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( ekko "eksempel 6 vellykket."; )

Søk eksempeltittel på en gitt side

Dette interessante eksemplet på PHP-kode med regexp finner og returnerer tekst mellom tagger Og.

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

Apache-logg-parsing

De fleste nettsteder kjører på kjente Apache-servere. Hvis nettstedet ditt også kjører på det, kan du analysere serverloggen ved å bruke php regexp.

//Logger: Apache-nettserver //Vellykkede treff kun til HTML-filer. Nyttig for å telle antall sidevisninger. "^((?#klient-IP eller domenenavn)S+)s+((?#grunnleggende autentisering)S+s+S+)s+[((?#dato og klokkeslett)[^]]+)]s+"(?: GET|POST|HEAD) ((?#fil)/[^ ?]+?.html?)??((?#parameters)[^ ?]+)? HTTP/+"s+(?#statuskode)200s+((?#bytes overført)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$" //Logger: Apache-nettserver //404 feiler bare "^((?#klient-IP eller domenenavn)S+)s+((?#grunnleggende autentisering)S+s+S+) s+[((?#dato og tid)[^]]+)]s+"(?:GET|POST|HEAD) ((?#fil)[^ ?"]+)??((?#parameters)[ ^?"]+)? HTTP/+"s+(?#statuskode)404s+((?#bytes overført)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$"

Eksempel på kontroll av passordkompleksitet

Et utmerket eksempel på et regulært uttrykk som kontrollerer kompleksitetsnivået til et passord. Passordet må være 6 tegn langt og inneholde minst ett stort tegn, et lite tegn og et tall.

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

Erstatte uttrykksikoner for tekst med grafiske uttrykksikoner

Denne eksempelkoden vil endre tekstuttrykksikonet til ditt grafiske. Interessant og nyttig PHP-snutt.

$texte="En tekst med en smiley:-)"; echo str_replace(":-)"," ",$tekste);

Eksempel på et regulært uttrykk å hente bilder frahtml-kode

Det er verdt å si at denne php-koden brukes i wordpress for å søke og behandle bilder.

post_content; $szSearchPattern = "~ ]* />~"; // Kjør preg_match_all for å ta alle bildene og lagre resultatene i $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Sjekk om vi har minst 1 bilde $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // Her kan du behandle bildene dine // I dette eksemplet vil de ganske enkelt vises på skjermen for ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Jeg håper du fant denne samlingen av php regexp eksempler nyttig. Hvis det er interessante tillegg eller eksempler på regulære uttrykk (php), skriv i kommentarfeltet.

Funksjonsbeskrivelse:

Preg_replace-funksjonen søker etter samsvar med et regulært uttrykk (mønster) med data i en streng (subjekt) og erstatter dem med dataene som er funnet i erstatning.

Argument

Beskrivelse

mønster

Nødvendig argument. Regelmessig uttrykk (søkemønster)

streng, array

erstatning

Nødvendig argument. En streng eller matrise som inneholder data som brukes til å erstatte data i Emne

Du kan også bruke en konstruksjon av formen \$(1) for lenker, som tilsvarer \$1; denne konstruksjonen brukes hvis lenken umiddelbart etterfølges av et tall (\$(1)1).

streng, array
Emne Nødvendig argument. En streng eller matrise som inneholder dataene som skal erstattes. streng, array
grense

Valgfritt argument. Maksimalt antall bytter. Standard er -1 (ubegrenset)

int
telle

Valgfritt argument. En variabel som inneholder antall erstatninger som er gjort.

int

Preg_replace()-funksjonen kan brukes med /e-modifikatoren. Når denne modifikatoren er tilstede, tolkes erstatningsparameteren som PHP-kode og brukes deretter til erstatning.

Vanlig uttrykk

Hver for seg bør vi dvele ved vanlige uttrykk, uten en forståelse av hvilke det er ganske vanskelig (om ikke umulig) å forstå arbeidet med funksjonen preg_replace().

En ganske god beskrivelse av regulære uttrykk er gitt på wikipedia.org, hovedpoengene ved bruk av regulære uttrykk er også beskrevet

Eksempler:

Eksempel 1:

I dette eksemplet erstatter vi alle tall plassert i parentes med stjerner.

Eksempel 2:

I dette eksemplet erstatter vi strengen som tilsvarer hele mønsteret med dataene som tilsvarer det første undermønsteret ved referansen \$1. Med andre ord, "ha 3 epler" som tilsvarer "/(\w+) (\d+) (\w+)/" vil bli erstattet med "ha" som tilsvarer (\w+).

Eksempel 3:

Dette eksemplet viser hva som skjer hvis du bruker arrays som mønster og erstatning.

Eksempel 4:

Dette eksemplet viser hva som skjer hvis du bruker arrays som mønster, erstatning og emne.

Eksempel 5:

Dette eksemplet viser bruken av /e-modifikatoren, dvs. når erstatning tolkes som php-kode. Nedenfor er konverteringen av tegn fra små til store bokstaver.

Eksempel 6:

Dette eksemplet viser bruken av telleargumentet. Her blir resultatet lik 2, så det ble to utskiftninger.

blandet preg_match(strengmønster, strengemne [, array &matches [, int flagg [, int offset]]])

Søker i det gitte tekstemnet etter samsvar med mønstermønsteret

Hvis parameteren for ekstra samsvar er spesifisert, vil den bli fylt med søkeresultater. $matches-elementet vil inneholde delen av strengen som samsvarer med hele mønsteret, $matches vil inneholde delen av strengen som samsvarer med det første undermønsteret, og så videre.

flagg kan ha følgende verdier:

PREG_OFFSET_CAPTURE

Hvis dette flagget er spesifisert, vil posisjonen i kildestrengen for hver funnet delstreng bli indikert. Det er viktig å huske at dette flagget endrer formatet til de returnerte dataene: hver forekomst returneres som en matrise, der det nullte elementet inneholder den funnet understrengen, og det første elementet inneholder forskyvningen. Dette flagget er tilgjengelig i PHP 4.3.0 og høyere.

Parameteren for ekstra flagg er tilgjengelig siden PHP 4.3.0.

Søket utføres fra venstre til høyre, fra begynnelsen av linjen. Den valgfrie offset-parameteren kan brukes til å spesifisere en alternativ startposisjon for søket. Den ekstra offset-parameteren er tilgjengelig siden PHP 4.3.3.

Kommentar:Å bruke offset-parameteren tilsvarer ikke å erstatte den matchede strengen med substr($subject, $offset) når funksjonen kalles preg_match_all(), siden mønster kan inneholde forhold som f.eks ^ , $ eller (? . Sammenligne:

Mens dette eksempelet

Funksjon preg_match() returnerer antall treff funnet. Det kan være 0 (ingen treff funnet) og 1 fordi preg_match() slutter å fungere etter den første treffet funnet. Hvis du trenger å finne eller telle alle treff, bør du bruke funksjonen preg_match_all(). Funksjon preg_match() returnerer FALSK i tilfelle det oppstår feil under utførelse.

Clue: Ikke bruk funksjonen preg_match(), hvis du trenger å sjekke om det er en delstreng i en gitt streng. Bruk til dette strpos() eller strstr(), siden de vil fullføre denne oppgaven mye raskere.


Eksempel 2. Søk etter ordet "web" i teksten

/*
Den spesielle sekvensen \b i mønsteret betyr en ordgrense,
derfor vil bare en isolert forekomst av ordet "nett" samsvare
maske, i motsetning til "webbing" eller "cobweb".
*/
if (preg_match("/\bweb\b/i" , "PHP er det valgte webskriptspråket.")) {
ekko "Oppføring funnet.";
) annet (
ekko "Ingen oppføring funnet.";
)preg_match ("/\bweb\b/i" , "PHP er det valgte skriptspråket for nettstedet.")) {
ekko "Oppføring funnet.";
) annet (
ekko "Ingen oppføring funnet.";
}
?>

Jeg har lenge ønsket å forstå regulære uttrykk. Selv om "finn ut av det" er et sterkt ord. For å mestre den store kunsten å bli en mester i regulære uttrykk, må du hele tiden jobbe med dem. Det er ikke nok å lære syntaks, spesialtegn og modifikatorer - du må kunne bruke dem. Og muligheten til å bruke kommer med erfaring.

I dette innlegget vil jeg legge ut eksempler på bruk av regulære uttrykk, som jeg selv har forstått arbeidet med.

Tabell med spesialtegn

Spesiell karakter Beskrivelse
\ Rømningssymbol. Eksempel: '/seo\/smo/'- samsvarer med linjen som inneholder seo/smo.
^ Start av datasymbol. Eksempel: '/^seo/'— samsvarer med en linje som begynner med ordet seo.
$ Slutt på data-symbol. Eksempel: '/blog$/'— samsvarer med en linje som slutter med ordet blogg.
. Ethvert tegn annet enn linjeskift. Eksempel: '/seo.ult/'- matcher strengen seopult, seo9ult, seo@ult, etc.
Inne i disse parentesene er det oppført tegn, alle kan vises på et gitt sted, men bare ett. Eksempel: '/seoult/'— bare linjer som inneholder seopult, seokult eller seomult vil bli matchet.
| Eller. Eksempel nedenfor.
() Undermaske.
? En eller null forekomster av det foregående tegnet eller undermønsteret.
* Et hvilket som helst antall forekomster av det foregående tegnet eller undermønsteret. Inkludert null.
+ En eller flere hendelser.
Eksempel: ‘/se+(op|om)?.*t/’- bokstaven s, deretter en eller flere bokstaver e, hvoretter kombinasjonen op eller om kan vises én gang, eller kanskje ikke én gang, deretter et hvilket som helst tall av symboler og bokstaven t.
(a,b) Antallet forekomster av det foregående tegnet eller undermønsteret fra a til b. Eksempel: (0,) - det samme som *, (0,1) - det samme som ?, (3,5) - 3, 4 eller 5 repetisjoner.

Enkle eksempler på PHP-skript som bruker regulære uttrykk:

1) Tidligere og etterfølgende uttrykk.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // finn et ord der ing kommer etter Box. Hvis ordet blir funnet, vil funksjonen returnere sant, hvis ikke, usant.$pattern1 = "/Box(?=ing)/" ; preg_match($pattern1, "Box Day"); // false preg_match ($pattern1, "Boxing Day" ); // sant // finn et ord som ikke har ing etter boks. Hvis ordet blir funnet, vil funksjonen returnere sant, hvis ikke, usant.$pattern2 = "/box(?!ing)/" ; preg_match($pattern2, "Boks for iPhone og iPad"); // true preg_match ($pattern2, "Hva er boksedag?") ; // false preg_match ($pattern2, "css-moz-box-shadow"); // sant // finn et ord der ing ikke innledes med boks. Hvis ordet blir funnet, vil funksjonen returnere sant, hvis ikke, usant.$pattern3 = "/(?

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

3) Få og vis Alexa Rank-verdien for et gitt nettsted.

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) ; ekko $alexa ; ?>

(.*?)

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

4) Hent og vis tittelen på siden.

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

(.*)<\/title>/s", $str, $m); ekko $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 ]/", "" , $innhold ); // erstatt nylinje- og tabulatortegn med mellomrom$content = preg_replace ("/(2,)/" , " " , $content ); // bytt ut mer enn 2 mellomrom med ett preg_match_all("/ ]*href=(?:"| \" )(.*)(?:"|\" )[^<>]*>(.*)<\/a>/iU", $innhold , $lenker ); // samle lenker if (sizeof ($links [ 1 ] ) > 0 ) // hvis lenker blir funnet($ut = array (); // rekke eksterne lenker foreach ($links [ 1 ] som $v ) ( if (preg_match ("/http:\/\/(www\.)(0,1)" . $domain . "/i" , $v ) ) // luke ut interne lenker( fortsett ; ) if ( preg_match ( "/(http:|https:)?\/\/(www\.)(0,1)(.*)/i", $v)) // ekstern referanse( $out = $v ; ) ) returner $out ; ) return array (); ) $domain = "side" ; $content = file_get_contents ("http://site/" ); $getoutlinks = getoutlinks($innhold, $domene) ; for ($i = 0; $i<= count ($getoutlinks ) ; $i ++ ) { echo $getoutlinks [ $i ] . "
" ; } ?>

]*href=(?:"|\")(.*)(?:"|\")[^<>]*>(.*)<\/a>/iU", $content, $links); // samle lenker if (sizeof($links) > 0) // hvis lenker blir funnet ( $out = array(); // rekke eksterne lenker foreach ($links as $v ) ( if (preg_match("/http:\/\/(www\.)(0,1)".$domain."/i", $v)) // luke ut interne lenker ( fortsett; ) if (preg_match ("/(http:|https:)?\/\/(www\.)(0,1)(..com/"); $getoutlinks = getoutlinks($content, $domain); for ( $i = 0;$i<= count($getoutlinks); $i++) { echo $getoutlinks[$i]."
"; } ?>

Hvor:
preg_replace— Utfører søk og erstatt ved å bruke et regulært uttrykk.
preg_match— utfører en sjekk mot et regulært uttrykk.
preg_match_all— finner alle treff, mens preg_match bare finner den første.
file_get_contents— få innholdet i filen som én linje.
listverk— fjerner mellomrom på begynnelsen og slutten av en linje.
str_erstatt— erstatter søkestrengen med en erstatningsstreng.
strip_tags- fjerner html- og php-koder fra en streng.
størrelsen av— får antall elementer i variabelen.
telle— teller antall matriseelementer eller antall objektegenskaper.