简体   繁体   中英

regexp keep/match any word that starts with a certain character

I'd like to keep only the string that starts with # or @

  1. foobar @sushi - wasabi
  2. foobar #sushi - horseradish

Therefore match on only @susui or remove text around it. PHP or JavaScript.

Depending on how you define a "word", you probably want

(?<=\s|^)[@#]\S+

or

(?<=\s|^)[@#]\w+

Explanation:

(?<=\s|^)  # Assert that the previous character is a space (or start of string)
[@#]       # Match @ or #
\S+        # Match one or more non-space characters
(or \w+)   # Match one or more alphanumeric characters.

So, in PHP:

preg_match_all('/(?<=\s|^)[@#]\S+/', $subject, $result, PREG_PATTERN_ORDER);

gives you an array $result of all the matches in the string $subject . In JavaScript, this won't work because lookbehinds (the "Assert..." part from the start of the regex) are not supported.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM