Regex Modifikatorer i PHP PHP regulære uttrykk - Del V Innledning Matching er case sensitive. Du kan ikke vite om hva du ser etter, er i små eller store bokstaver eller har blandet tilfeller. Det er mulig for deg å lage en sak insensitive kamp. Du trenger det som kalles en endrings for dette. Det finnes en god del modifiser og hver har sin egen hensikt. Vi skal lære noen av dem i denne delen av serien. Det jeg Modifier Som standard er målrettet og små bokstaver. For å gjøre det små bokstaver, må du bruke det som kalles i modifier.
Så hvis vi har regex, /sende /og så har vi også $ emne = "Klikk på knappen Send." følgende kode vil ikke produsere en kamp: $ emne = "Klikk på knappen Send."; $ emne = "Klikk på knappen Send."; if (preg_match ("/sende /", $ emne)) echo "matchet". "Ellers echo" ikke samsvarer "."?> Den regex samsvarte ikke gjenstand streng fordi regex har "send", der S er med små bokstaver, men faget strengen har "Send" hvor S er i store bokstaver. Hvis du ønsker dette sams å være små bokstaver, så din regex vil måtte være /sende /i Vær oppmerksom på i like etter andre skråstrek. Det er det jeg modifier.
Følgende kode vil produsere en kamp. $ emne = "Klikk på knappen Send."; if (preg_match ("/send /i", $ emne)) echo "matchet". "Ellers echo" Not Matchet "."?> Matching har oppstått fordi vi har gjort regex små bokstaver, med jeg modifier. Global Matching Det er mulig for deg å ha mer enn én sub streng i emnestrengen som ville matche regex. Som standard er bare den første understreng i emne matchet. For å matche alle under strenger i faget, må du bruke funksjonen preg_match_all ().
Dette er syntaksen: int preg_match_all (string $ mønster, string $ emne, array & $ kampene [, int $ flagg]) Det første argumentet er regex. Den andre er emnet. Den tredje er matrisen, som holder alle kampene. Det er en to-dimensjonal array, her (For preg_match () -funksjonen det er et endimensjonalt array). Det fjerde argumentet er valgfritt. Vi skal snakke bare om ett flagg for dette argumentet. Tenk på følgende gjenstand strengen: $ emne = "En katt er et dyr En rotte er et dyr En bat er en skapning..."; I ovennevnte emne, har du under strenger: katt, rotte og balltre.
Du har katten først, deretter rotte og deretter balltre. Hver av disse under strenger matche følgende regex: /[cbr] på /Dette mønsteret vil matche bare den første sub streng, "cat". Hvis du vil "katt" og "rotte" og "bat" for å bli matchet, må du bruke den preg_match_all () funksjon som følgende kode illustrerer: $ emne = "En katt er et dyr En rotte er et dyr A.. bat er en skapning. "; if (preg_match_all ("/[cbr] på /", $ emne, $ kampene, PREG_PATTERN_ORDER)) echo "matchet". "Ellers echo" Not Matchet "." Ekko "echo $ kampene [0] [0]." Echo $ kampene [0] [1]. "Echo $ kampene [0] [2].
"?> Det siste argumentet i preg_match_all () -funksjonen er et flagg. Vi skal komme tilbake til det om kort tid. De første, andre og tredje element i den første oppstillingen av den todimensjonale matrise er "cat", "rotte" og "bat". Slik at produksjonen av koden ovenfor er: Matchet katt rotte bat Nå todimensjonal matrise gir to arrays i koden. Den første matrise mottar under strengene passet, i den rekkefølgen i hvilken de under strengene ble sett i faget. Dette er global matching.
Den PREG_PATTERN_ORDER flagg Med dette flagget, resultatene er slik at $ kampene [0] er en matrise av full mønsteret stemmer, $ kampene [1] er en matrise av strenger matches av den første parentes subpattern, og så videre. De s og m modifikatorer Den modifiserende s refererer til en enkelt linje, og m modifiserings refererer til flere linjer i en streng. Vanligvis uten disse modifikatorer, får vi det vi ønsker. Men noen ganger ønsker vi å holde styr på \\ n tegn. En fil på harddisken kan bestå av mange linjer med tekst hvert slutter med \\ n karakter.
Som standard ^ og $ tegn anker i begynnelsen og på slutten av faget streng. Vi kan få dem til å feste begynnelsen og slutten av linjer. De s og m modifikatorer påvirke tolkningen av ^, $ og dot metahcaracter. Her er en fullstendig beskrivelse av s og m modifikatorer * ingen modifikatorer: Her ser vi på tilfellet hvor det ikke er modifier like etter andre skråstrek. Under denne tilstanden '.' matcher alle tegn unntatt "\\ n". ^ Sams bare ved begynnelsen av strengen og $ sams bare på emnet strengen ende eller før \\ n i enden. Dette er standardmåten til dot metategn.
* S modifier: Dette gjør faget streng oppfører seg som en lang linje uavhengig av linjeskift karakter som kan være der. Så '.' matcher alle tegn, selv "\\ n". ^ Sams bare ved begynnelsen av strengen og $ sams bare ved slutten av strengen eller emnet før \\ n. * M modifier: Dette gjør emnet strengen oppfører seg som et sett av flere linjer. I emnestrengen, er sammenhengende linjer atskilt av \\ n karakter. Så '.' matcher alle tegn unntatt "\\ n". På denne måten ^ og $ er i stand til å matche i starten eller slutten av en linje innen faget streng.
Her ^ kamper i begynnelsen av strengen eller like etter \\ n karakter, mens $ kamper like før \\ n karakter. Vi skal bruker eksempler for å illustrere de ovennevnte tre betingelser. Vi starter med å se på den første betingelsen. Ingen Modifikatorer Les det første punktet ovenfor igjen. Tenk deg følgende linjer lagt streng: $ emne = "Den første setningen \\ n Den andre setningen \\ n Den tredje punktum \\ n..."; Faget strengen har tre linjer. De følgende uttrykk gir en kamp. preg_match ("/andre /", $ emne) Under string "andre", i den andre linjen (setning) er matchet.
Vurdere følgende mønster: /^.*$/Dette mønsteret (regex) forventes under normale omstendigheter, for å matche hele strengen. La oss se om det gjør det med ovenfor flere linjer lagt streng. Vurdere følgende kode: $ emne = "Den første setningen \\ n Den andre setningen \\ n Den tredje punktum \\ n..."; if (preg_match ("/^.*$/", $ emne)) echo "matchet". "Ellers echo" ikke samsvarer "."?> Hvis du kjører denne koden, ingen matchende vil skje. Dette er på grunn av tilstedeværelsen av den \\ n tegnet i emnestrengen. Som standard prikken klassen ikke stemmer overens med \\ n karakter.
Jeg håper du nå sette pris på hva det første punktet ovenfor snakker om. s modifier Les det andre punktet ovenfor igjen. Vi skal gjøre en lignende ting som vi gjorde før. Tenk på følgende gjenstand strengen: $ emne = "Den første setningen \\ n Den andre setningen \\ n Den tredje punktum \\ n..."; Faget strengen har tre linjer. De følgende uttrykk gir en kamp. preg_match ("/andre /s", $ emne) Merk at s modifier har blitt brukt. Under string "andre", i den andre linjen (setning) er matchet. Vurdere følgende mønster: /^.*$/s Dette mønsteret (regex) er ment å matche hele strengen.
La oss se om det gjør det med ovenfor flere linjer lagt streng. Vurdere følgende kode: $ emne = "Den første setningen \\ n Den andre setningen \\ n Den tredje punktum \\ n..."; if (preg_match ("/^.*$/s", $ emne)) echo "matchet". "Ellers echo" ikke samsvarer "."?> Er en kamp produsert. Dette er fordi, med s modifier, stemmer overens med dot (klasse) av linjeskift. Jeg håper du nå sette pris på hva det andre punktet ovenfor snakker om. Den m Modifier Les det tredje punktet ovenfor igjen. Her ser vi på effekten av m modifier.
Tenk på følgende gjenstand strengen: $ emne = "Den første setningen \\ n Den andre setningen \\ n Den tredje punktum \\ n..."; Faget strengen har tre linjer. De følgende uttrykk gir en kamp. preg_match ("/andre /m", $ emne) Merk at m modifier har blitt brukt. Under string "andre", i den andre linjen er matchet. Vurdere følgende mønster: /(^.*$)/m Med m modifier, bør dette mønsteret (regex) passer bare én linje. La oss se om det gjør det med ovenfor flere linjer lagt streng. Vurdere følgende kode: $ emne = "Den første setningen \\ n Den andre setningen \\ n Den tredje punktum \\ n...
"; if (preg_match ("/^.*$/m", $ emne)) echo "matchet". "Ellers echo" ikke samsvarer "."?> Er bare den første setningen matchet. Så det matchet den første linjen. Du kan matche og fange opp alle de tre setninger i de tre linjene. Du setter mønsteret i parentes (sub-gruppen). Du bruker PHP regex funksjon, preg_match_all () i stedet for preg_match (). Du bruker også flagget PREG_PATTERN_ORDER. Matrisen som inneholder de fangede under strengene er en todimensjonal matrise. Den har to arrays.
Følgende kode illustrerer dette: $ emne = "Den første setningen \\ n Den andre setningen \\ n Den tredje punktum \\ n..."; if (preg_match_all ("/(^.*$)/m", $ emne, kamper $, PREG_PATTERN_ORDER)) echo "matchet". "Ellers echo" Not Matchet "." Ekko "echo $ kampene [0] [0]." Echo $ kampene [0] [1]. "Echo $ kampene [0] [2]." Ekko "echo $ kampene [1] [0]." Echo $ kampene [1] [1]. "Echo $ kampene [1] [2].">