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

Share:
17,611
Kirk Ouimet
Author by

Kirk Ouimet

The internet is a miracle.

Updated on June 27, 2022

Comments

  • Kirk Ouimet
    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
    Kirk Ouimet about 14 years
    Excellent - that worked perfectly! Can you tell me more about \w?
  • animuson
    animuson about 14 years
    Or 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
    animuson about 14 years
    @Kirk: \w simply matches any 'word' character: A-Za-z0-9_
  • Max Shawabkeh
    Max Shawabkeh about 14 years
    Yes, but in that case you'll have to use a capturing group (remove the ?:).
  • Kirk Ouimet
    Kirk Ouimet about 14 years
    This actually was really helpful! Thanks for the white space fix
  • Kalle H. Väravas
    Kalle H. Väravas about 9 years
    (?=\s|$) a big big help for the regexly-challenged people! Thank you for that trick.