*   >> Læs Uddannelse artikler >> tech >> web development

RegEx Modifikatorer i Php

regex Modifikatorer i PHP PHP Regular Expressions - del V Introduktion Matching er små bogstaver. Du kan ikke vide, om det, du leder efter, er med små bogstaver eller store bogstaver, eller har blandet sager. Det er muligt for dig at gøre en sag ufølsom kamp. Du har brug for det, der kaldes en modifikator til dette. Der er en god antallet af modifikatorer og hver har sit eget formål. Vi skal lære nogle af dem i denne del af serien. Det jeg Modifier Som standard matchning er små bogstaver. For at gøre det tilfælde ufølsom, er du nødt til at bruge det, der kaldes den i modifier.

Så hvis vi har regex, /sende /og så har vi også $ emne = "Klik på knappen Send." følgende kode vil ikke producere en match: $ emne = "Klik på knappen Send."; $ emne = "Klik på knappen Send."; if (preg_match ("/send /", $ emne)) echo "Matchet". "Ellers echo" Ikke Matchet "."?> Den regex ikke passer til motivet strengen fordi regex har "send", hvor S er med små bogstaver, men emnet strengen har "Send", hvor S er med store bogstaver. Hvis du ønsker denne matching til at være tilfældet ufølsom, så vil din regex skal være /sende /jeg Bemærk jeg bare efter den anden skråstreg. Det er i middel.

Følgende kode vil producere en kamp. $ emne = "Klik på knappen Send."; if (preg_match ("/send /i", $ emne)) echo "Matchet". "Ellers ekko" Ikke Matchet "."?> Der er opstået Matching, fordi vi har gjort det regex tilfældet ufølsom, med i modifier. Global Matching Det er muligt for dig at have mere end én sub streng i strengen emne, der ville matche regex. Som standard er kun den første sub streng i emnet matchet. For at matche alle de sub strenge i emnet, skal du bruge funktionen preg_match_all ().

Dette er syntaksen: int preg_match_all (string $ mønster, snor $ emne, matrix & $ kampe [, int $ flag]) Det første argument er den regex. Den anden er emnet. Den tredje er den array, der besidder alle de kampe. Det er et todimensionalt array, here (For preg_match () funktion er en endimensionalt array). Det fjerde argument er valgfrit. Vi taler kun om én flag til dette argument. Overvej følgende emne streng: $ emne = "En kat er et dyr En rotte er et dyr et bat er et væsen..."; I ovenstående emne, har du sub strenge: kat, rotter og flagermus. Du har kat først, derefter rotte og derefter bat.

Hver af disse sub strenge matche følgende regex: /[CBR] på /Dette mønster vil matche kun den første sub streng, "kat". Hvis du vil "kat" og "rotte" og "bat" at blive matchet, er du nødt til at bruge preg_match_all () funktion som følgende kode illustrerer: $ emne = "En kat er et dyr En rotte er et dyr A.. bat er et væsen. " hvis (preg_match_all ("/[CBR] på /", $ emne, $ kampe, PREG_PATTERN_ORDER)) echo "Matchet". "Ellers ekko" Ikke Matchet "." Echo "echo $ kampe [0] [0]." Echo $ matches [0] [1]. "Echo $ kampe [0] [2]."?> Den sidste argument i preg_match_all () funktion er et flag.

Vi skal vende tilbage til det om kort tid. Den første, anden og tredje del af den første række af det todimensionale array "kat", "rat" og "bat". Så produktionen af ​​ovenstående kode: Matched cat rotte bat Nu todimensionalt array indeholder to arrays i koden. Den første gruppe modtager sub strenge matches, i den rækkefølge, som sub strengene blev set i emnet. Dette er global matchning.

Den PREG_PATTERN_ORDER flag med dette flag, er resultaterne således, $ matches [0] er en matrix af fuld mønster kampe, $ matches [1] er en vifte af strenge modsvares af den første parentes undermønster, og så videre. S og m modifikatorer Den s modifier refererer til en enkelt linje, og m modifier refererer til flere linjer i en streng. Normalt uden disse modifikatorer, vi får, hvad vi ønsker. Nogle gange, men vi ønsker at holde styr på \\ n tegn. En fil på harddisken kan være sammensat af mange linjer tekst der hver slutter med \\ n karakter.

Som standard ^ og $ tegn anker ved begyndelsen og slutningen af ​​emnet streng. Vi kan gøre dem forankre begyndelsen og slutningen af ​​linjer. De s og m modifikatorer påvirker fortolkningen af ​​^, $ og dot metahcaracter. Her er den fulde beskrivelse af s og m modifikatorer * ingen modifikatorer: Her ser vi på det tilfælde, hvor der ikke er nogen modifier lige efter den anden skråstreg. Under denne tilstand «.« matcher alle tegn undtagen "\\ n". ^ Matcher kun ved begyndelsen af ​​strengen og $ kampe kun på emnet tamp, eller før \\ n i slutningen. Dette er standard opførsel af dot metategn.

* S modifier: Det gør emnet strengen opfører sig som en lang linje uafhængig af enhver newline karakter, der kan være der. Så '.' matcher ethvert tegn, selv "\\ n". ^ Matcher kun ved begyndelsen af ​​strengen og $ kampe først ved udgangen af ​​emnet streng eller før \\ n. * M modifier: Det gør emnet strengen opfører sig som et sæt af flere linjer. I den foreliggende strengen bliver efterfølgende linier adskilt af \\ n karakter. Så '.' matcher alle tegn undtagen "\\ n". På denne måde ^ og $ er i stand til at matche i starten eller slutningen af ​​en linje inden for faget streng.

Her ^ kampe ved begyndelsen af ​​strengen eller lige efter \\ n karakter, mens $ matcher lige før \\ n karakter. Vi anvender eksempler for at illustrere ovennævnte tre betingelser. Vi starter med at kigge på den første betingelse. Ingen Modifiers Læs det første punkt ovenfor igen. Overvej følgende Multiline emne streng: $ emne = "Den første sætning \\ n Den anden sætning \\ n Tredje punktum \\ n..."; Strengen Individet har tre linjer. Følgende udtryk giver et match. preg_match ("/sekund /", $ emne) Den sub string "anden", i anden linje (sætning) matches. Overvej følgende mønster: /^.

*$/forventes Dette mønster (regex) under normale omstændigheder, for at matche hele strengen. Lad os se, om det sker med ovenstående multi-linje betinget streng. Betragt følgende kode: $ emne = "Den første sætning \\ n Den anden sætning \\ n Tredje punktum \\ n..."; if (preg_match ("/^.*$/", $ emne)) echo "Matchet". "Ellers echo" Ikke Matchet "."?> Hvis du kører denne kode, ingen matchende vil forekomme. Dette er på grund af tilstedeværelsen af ​​\\ n tegn i strengen emnet. Som standard dot klassen ikke passer til \\ n karakter. Jeg håber, du nu forstå, hvad det første punkt ovenfor taler om.

s modifier Læs det andet punkt over igen. Vi skal gøre en lignende ting, som vi gjorde før. Overvej følgende emne streng: $ emne = "Den første sætning \\ n Den anden sætning \\ n Tredje punktum \\ n..."; Strengen Individet har tre linjer. Følgende udtryk giver et match. preg_match ("/sekund /s", $ emne) Bemærk, at s modifier er blevet anvendt. Sub string "anden", i anden linje (sætning) matches. Overvej følgende mønster: /^.*$/s Dette mønster (regex) formodes at matche hele strengen. Lad os se, om det sker med ovenstående multi-linje betinget streng.

Betragt følgende kode: $ emne = "Den første sætning \\ n Den anden sætning \\ n Tredje punktum \\ n..."; if (preg_match ("/^.*$/s", $ emne)) echo "Matchet". "Ellers echo" Ikke Matchet "."?> En match er produceret. Dette skyldes, med s modifier, prikken (klasse) matcher linjeskift. Jeg håber, du nu forstå, hvad det andet punkt ovenfor taler om. Den m Modifier Læs tredje punkt over igen. Her ser vi på effekten af ​​m modifier. Overvej følgende emne streng: $ emne = "Den første sætning \\ n Den anden sætning \\ n Tredje punktum \\ n..."; Strengen Individet har tre linjer.

Følgende udtryk giver et match. preg_match ("/sekund /m", $ emne) Bemærk at m modifier er blevet anvendt. Sub string "anden", i anden linje matches. Overvej følgende mønster: /(^.*$)/m Med m modifier, bør dette mønster (regex) passer kun én linje. Lad os se, om det sker med ovenstående multi-linje betinget streng. Betragt følgende kode: $ emne = "Den første sætning \\ n Den anden sætning \\ n Tredje punktum \\ n..."; if (preg_match ("/^.*$/m", $ emne)) echo "Matchet". "Ellers echo" Ikke Matchet "."?> Kun den første sætning er matchet. Så det matchede den første linje.

Du kan matche og indfange alle de tre sætninger i de tre linjer. Du sætter mønsteret i parentes (undergruppe). Du bruger PHP regex-funktion, preg_match_all () i stedet for preg_match (). Du kan også bruge flaget PREG_PATTERN_ORDER. Idet arrayet indeholder tilfangetagne sub strengene er et todimensionalt array. Det har to arrays. Følgende kode illustrerer dette: $ emne = "Den første sætning \\ n Den anden sætning \\ n Tredje punktum \\ n..."; hvis (preg_match_all ("/(^.*$)/m", $ emne, $ kampe, PREG_PATTERN_ORDER)) echo "Matchet". "Ellers ekko" Ikke Matchet "." Echo "echo $ kampe [0] [0].

" Echo $ matches [0] [1]. "Echo $ kampe [0] [2]." Echo "echo $ kampe [1] [0]." Echo $ kampe [1] [1]. "Echo $ kampe [1] [2].">

Page   <<       [1] [2] [3] [4] >>
Copyright © 2008 - 2016 Læs Uddannelse artikler,https://uddannelse.nmjjxx.com All rights reserved.