regex Modifiers i PHP PHP reguljära uttryck - Del V Inledning Matchning är stora och små bokstäver. Du kanske inte vet om vad du söker är i gemener eller versaler eller har blandat fall. Det är möjligt för dig att göra ett fall okänslig match. Du behöver vad som kallas en modifierings för detta. Det finns ett stort antal modifierings och alla har sitt eget syfte. Vi ska lära sig några av dem i den här delen av serien. Den i Modifier Som standard är matcha stora och små bokstäver. För att göra det fall okänsligt, måste du använda det som kallas i modifierings.
Så om vi har regex, /skicka /ta och sedan har vi också $ Ämne = "Klicka på knappen Skicka." följande kod inte kommer att producera en match: $ Ämne = "Klicka på knappen Skicka."; $ Ämne = "Klicka på knappen Skicka."; if (preg_match ("/skicka /ta", $ ämne)) echo "Matchade". "Else echo" Inte Matchade "."?> Den regex matchade inte motivet strängen eftersom regex har "skicka" där S är i gemener, men ämnet strängen har "Send" där S är i versaler. Om du vill att matcha vara fallet okänslig, sedan ditt regex måste vara /skicka /Jag noterar jag bara efter andra snedstrecket. Det är den i: modifierare.
Följande kod kommer att producera en match. $ Ämne = "Klicka på knappen Skicka."; if (preg_match ("/skicka /i", $ ämne)) echo "Matchade". "Annars echo" Inte Matchade "."?> Matching har skett eftersom vi har gjort regex fallet okänslig, med i medel. Global Matching Det är möjligt för dig att ha mer än en understräng i ämnet sträng som skulle matcha regex. Som standard är bara den första under strängen i ämnet matchas. För att matcha alla understrängar i ämnet, måste du använda funktionen preg_match_all ().
Detta är syntaxen: int preg_match_all (sträng $ mönster, string $ ämne, array & $ matcher [, int $ flaggor]) Det första argumentet är det reguljära uttrycket. Den andra är föremål. Den tredje är arrayen, som innehar samtliga matcher. Det är en två-dimensionell array, här (Beträffande preg_match () funktion är det en en endimensionell array). Det fjärde argumentet är valfritt. Vi ska bara tala om en flagga för detta argument. Tänk dig följande föremål sträng: $ Ämne = "En katt är ett djur En råtta är ett djur En fladdermus är en varelse...
"; I detta ärende, har du under strängar: katt, råtta och slagträ. Du har katt först, sedan råtta och sedan bat. Var och en av dessa under strängar matchar följande regex: /[cbr] på /Det här mönstret kommer att matcha endast den första understrängen, "katt". Om du vill ha "katt" och "råtta" och "bat" som ska matchas, måste du använda preg_match_all () funktion som följande kod visar: $ Ämne = "En katt är ett djur En råtta är ett djur A.. BAT är en varelse ". if (preg_match_all ("/[cbr] på /", $ föremål, $ matcher, PREG_PATTERN_ORDER)) echo "Matchade". "Annars echo" Inte Matchade ".
" Echo "echo $ matcher [0] [0]." Echo $ matcher [0] [1]. "Echo $ matcher [0] [2]."?> Det sista argumentet i preg_match_all () funktionen är en flagga. Vi ska komma tillbaka till det inom kort. De första, andra och tredje elementen i den första uppsättningen av de två-dimensionell array är "katt", "råtta" och "bat". Så utmatningen från ovanstående kod är: Matched katt råtta bat Nu två-dimensionell array ger två matriser i koden. Den första uppsättningen får understrängar matchas, i den ordning som understrängar sågs i ämnet. Detta är global matchning.
Den PREG_PATTERN_ORDER flagga med denna flagga, resultaten är sådana att $ matcher [0] är en uppsättning av hela mönstret matchar, $ matcher [1] är en array med strängar matchas av första parentes delmönster, och så vidare. S och m modifierings s modifierings avser en enda rad och m modifierings hänvisar till flera rader i en sträng. Vanligtvis utan dessa modifierings, vi får vad vi vill. Men ibland vill vi hålla reda på \\ n tecken. En fil på hårddisken kan bestå av många textrader vardera slutar med \\ n karaktär. Som standard ^ och $ tecken ankare i början och i slutet av ämnet strängen.
Vi kan göra dem förankra början och slutet av rader. De s och m modifierings påverkar tolkningen av ^, $ och punkt metahcaracter. Här är den fullständiga beskrivningen av s och m modifierings * inga modifierings: Här ser vi på det fall då det inte finns någon modifierings strax efter andra snedstrecket. Under detta tillstånd "." matchar alla tecken utom "\\ n". ^ Matchar bara i början av strängen och $ matchar bara mot motivet snörände eller före \\ n på slutet. Detta är standardbeteende punktmetatecken.
* S modifierings: Detta gör ämnet strängen beter sig som en lång rad oberoende av radmatningstecken som kan vara där. Så '.' matchar alla tecken, även "\\ n". ^ Matchar bara i början av strängen och $ matchar först i slutet av ämnet strängen eller före \\ n. * M modifierings: Detta gör ämnet strängen beter sig som en uppsättning av flera rader. I ämnet strängen, är på varandra följande linjer skiljs åt av \\ n karaktär. Så '.' matchar alla tecken utom "\\ n". På detta sätt ^ och $ kan matcha i början eller slutet av varje rad inom ämnet strängen.
Här, ^ matcher i början av strängen eller strax efter \\ n karaktär, medan $ matchar strax före \\ n karaktär. Vi skall använda exempel för att illustrera de tre villkoren ovan. Vi börjar med att titta på det första villkoret. Inga Modifiers Läs den första punkten ovan igen. Tänk dig följande multi ämne sträng: $ Ämne = "Den första meningen \\ n Den andra meningen \\ n tredje meningen \\ n..."; Ämnet strängen har tre linjer. Följande uttryck producerar en match. preg_match ("/sekund /", $ ämne) Den i understrängen "andra", i den andra raden (meningen) matchas. Tänk på följande mönster: /^.
*$/Detta mönster (regex) förväntas under normala förhållanden, för att matcha hela strängen. Låt oss se om det gör det med den ovan multi-line ämne sträng. Tänk på följande kod: $ Ämne = "Den första meningen \\ n Den andra meningen \\ n tredje meningen \\ n..."; if (preg_match ("/^.*$/", $ ämne)) echo "Matchade". "Else echo" Inte Matchade "."?> Om du kör den här koden, ingen matchande kommer att ske. Detta är på grund av närvaron av det \\ n som i ämnessträngen. Som standard punkt klassen inte matchar \\ n karaktär. Jag hoppas att ni nu förstår vad den första punkten ovan talar om.
s modifierings Läs den andra punkten ovan igen. Vi ska göra en liknande sak som vi gjorde innan. Tänk dig följande föremål sträng: $ Ämne = "Den första meningen \\ n Den andra meningen \\ n tredje meningen \\ n..."; Ämnet strängen har tre linjer. Följande uttryck producerar en match. preg_match ("/sekund /s", $ ämne) Notera att s modifierings har använts. Under sträng "andra", på andra raden (meningen) matchas. Tänk på följande mönster: /^.*$/s Detta mönster (regex) är tänkt att matcha hela strängen. Låt oss se om det gör det med den ovan multi-line ämne sträng.
Tänk på följande kod: $ Ämne = "Den första meningen \\ n Den andra meningen \\ n tredje meningen \\ n..."; if (preg_match ("/^.*$/s", $ ämne)) echo "Matchade". "Else echo" Inte Matchade "."?> En match produceras. Detta beror, med s modifierings punkten (klass) matchar radbrytningstecken. Jag hoppas att ni nu förstår vad den andra punkten ovan talar om. M Modifier Läs den tredje punkten ovan igen. Här tittar vi på effekten av m modifierings. Tänk dig följande föremål sträng: $ Ämne = "Den första meningen \\ n Den andra meningen \\ n tredje meningen \\ n..."; Ämnet strängen har tre linjer.
Följande uttryck producerar en match. preg_match ("/sekund /m", $ ämne) Notera att m modifierings har använts. Under sträng "andra", i den andra raden matchas. Tänk på följande mönster: /(^.*$)/m Med m modifierings, bör detta mönster (regex) stämmer endast en rad. Låt oss se om det gör det med den ovan multi-line ämne sträng. Tänk på följande kod: $ Ämne = "Den första meningen \\ n Den andra meningen \\ n tredje meningen \\ n..."; if (preg_match ("/^.*$/m", $ ämne)) echo "Matchade". "Else echo" Inte Matchade "."?> Endast den första meningen matchas. Så det matchade den första raden.
Du kan matcha och fånga alla tre meningarna i de tre linjerna. Du sätter mönstret inom parentes (undergrupp). Du använder PHP regex funktionen preg_match_all () i stället för preg_match (). Du kan också använda flaggan PREG_PATTERN_ORDER. Den matris som innehåller de infångade understrängar är en tvådimensionell matris. Den har två matriser. Följande kod visar detta: $ Ämne = "Den första meningen \\ n Den andra meningen \\ n tredje meningen \\ n..."; if (preg_match_all ("/(^.*$)/m", $ ämne, tändstickor $, PREG_PATTERN_ORDER)) echo "Matchade". "Annars echo" Inte Matchade ".
" Echo "echo $ matcher [0] [0]." Echo $ matcher [0] [1]. "Echo $ matcher [0] [2]." Echo "echo $ matcher [1] [0]." Echo $ matcher [1] [1]. "Echo $ matcher [1] [2].">