Hvis du ikke bruker x modifier, oppmerksom på at "(? #Comment)" Tag kan ikke nestes, Du kan ikke ha "(? #Comment (? # Kommentar))" i en regex. Inkludering Modifikatorer Du kan legge modifikatorer i regex (i mønsteret). Jeg vil bruke case-mindre modifier, jeg for å illustrere dette. Husk tilfelle-mindre modifier gjør den matchende ufølsom. Unntaket er når endrings er i en subpattern (se nedenfor). En modifiserings er innebygd ved å kapsle den inn tegnene, (?), Like etter '?' skilt. Vurdere den tilgjengelige streng, "XYZ" og regex, /(? I) xyz /Obs tegnsettet "(? I)" som har den jeg modifier.
Ovennevnte regex ville matche alle de ovennevnte tema. Følgende uttrykk produserer en kamp: "XYZ" = ~ /xyz /vurdere følgende regex (i?): (? I) /xy z /Her modifiserings har blitt satt like før det siste kapittelet, "z". Virkningen er den samme som før. Det spiller ingen rolle hvor du setter modifier. Hele regex påvirkes uavhengig av hvor du setter modifier. Så /(? I) xyz /, /xy (? I) z /og /xyz /jeg mener det samme. Non-fange grupper En gruppe er teksten i parentes i regex. Som standard er en slik tekst fanget inn i en variabel eller listen på venstre side av = ~ operatør.
Vurdere følgende kode: bruke strenge; minarr = ("Dette er en, og det er to." = ~ /(one).*(two)/); print $ arr [0], "\\ n"; print $ arr [1], "\\ n"; Den er resultatet av koden ovenfor: en to Utgangen består av ordene, "One" og "to". Dette er elementer fanget og lagret i matrisen,arr. Du kan ikke ønsker å fange hver gruppe. Hvis du ikke ønsker å fange en gruppe, forut for innholdet i gruppen med "?". For å hindre at gruppen "(en)" over fra å bli fanget, må du "(:? En)" for gruppen. Gruppen fortsatt er gyldig i et mønster med sin annen fordel, men det er ikke fanges opp.
Følgende kode illustrerer dette: bruke strenge; minarr = ("Dette er en, og det er to." = ~ /(?:one).*(two)/); print $ arr [0], "\\ n"; print $ arr [1], "\\ n"; Utgangen av koden