Regex to Match White Space or End of String
17,611
Solution 1
try /@(\w+)/
instead of /@(.+?)\s/
.
Solution 2
To detect whitespace or end of string, you would use: /@(.+?)(?=\s|$)/
, but unless your usernames contain non-alphanumeric characters, it's simpler to use the \w
for word character or \b
for word break, i.e.: /@(.+?)\b/
or /@(\w)+/
.
Comments
-
Kirk Ouimet almost 2 years
I'm trying to find every instance of @username in comment text and replace it with a link. Here's my PHP so far:
$comment = preg_replace('/@(.+?)\s/', '<a href="/users/${1}/">@${1}</a> ', $comment);
The only problem is the regex is dependent upon there being whitespace after the @username reference. Can anyone help me tweak this so it will also match if it is at the end of the string?
-
Kirk Ouimet about 14 yearsExcellent - that worked perfectly! Can you tell me more about \w?
-
animuson about 14 yearsOr could we use that to determine whether to add a white-space at the end of the link?
$comment = preg_replace('/@(.+?)(?:\s|$)/', '<a href="/users/${1}/">@${1}</a>${2}', $comment);
-
animuson about 14 years@Kirk: \w simply matches any 'word' character: A-Za-z0-9_
-
Max Shawabkeh about 14 yearsYes, but in that case you'll have to use a capturing group (remove the
?:
). -
Kirk Ouimet about 14 yearsThis actually was really helpful! Thanks for the white space fix
-
Kalle H. Väravas about 9 years
(?=\s|$)
a big big help for the regexly-challenged people! Thank you for that trick.