Kirk Ouimet
Kirk Ouimet

Reputation: 28354

Regex to Match White Space or End of String

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?

Upvotes: 10

Views: 20540

Answers (2)

Max Shawabkeh
Max Shawabkeh

Reputation: 38603

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)+/.

Upvotes: 14

J-16 SDiZ
J-16 SDiZ

Reputation: 26910

try /@(\w+)/ instead of /@(.+?)\s/.

Upvotes: 9

Related Questions