PHP Regular Expression Improvement 2.0

Hello All,

Dankzij @FailedDev heb ik momenteel de regex hieronder die wordt gebruikt in een preg_match voor een shoutbox. Wat ik in deze vraag probeer te bereiken, is de regel dat de regex niet hoofdlettergevoelig is en geef hem de mogelijkheid om het gebruik van ruimte (s) toe te staan ​​in het 'sleutelwoord', dat in dit geval mislukt is.

/(?<=^|\s)(?:\bfred\b|\$[$\w]*fred\b)/x


Zie voor achtergrondinformatie de referentielink.

Referentie


Bedankt voor alle hulp hierover.


Update: Thanks to some helpful information, I have come up with the following regex that does what I need, though I feel it is not the most efficient solution.

~(?:(?<=\s|^)[$\S]*|\b)f+(?:\.+|\s+)?r+(?:\.+|\s+)?e+(?:\.+|\s+)?d+(?:\.+|)?\b~i

0

1 antwoord

Als u het niet hoofdlettergevoelig wilt maken, gebruikt u de /i modifier .

Gebruik \ s * voor een variabel aantal whitespace-tekens, of [] ? voor een enkele optionele spatie .

Zie ook de handleiding over preg_match en de PCRE syntax overzicht en http://regular-expressions.info/ voor een zelfstudie. Controleer ook de referentie vraag Is er iets als RegexBuddy in de open source wereld? voor een lijst met hulpmiddelen om te helpen bij het maken van reguliere expressies. En enkele handige online tools .

3
toegevoegd
+1 Jij bent de regex MAN!
toegevoegd de auteur Yes Barry, de bron
Nee, niet echt. Er zijn hier veel meer competente mensen. Ik hou gewoon van hyperlinks.
toegevoegd de auteur mario, de bron
@Matthew: gebruik in plaats van uw ?: groepen een charclass [. \ S] *
toegevoegd de auteur mario, de bron
Bedankt voor je reactie. Van de door jou geleverde informatie heb ik het volgende bedacht, hoewel ik vind dat het niet de meest efficiënte oplossing is, het is een oplossing die werkt: ~ (?: (? <= \ S | ^) [$ \ S ?.?.?.] * | \ b) f + (: \ + | \ s +) r + (: \ + | \ s +) e + (: \ + | & zwnj; \ s +) d + (: \? . + |?) \ b ~ i
toegevoegd de auteur Matthew, de bron
Bedankt voor de heads-up :)
toegevoegd de auteur Matthew, de bron