I'd like to keep only the string that starts with # or @
- foobar @sushi - wasabi
- foobar #sushi - horseradish
Therefore match on only @susui or remove text around it. PHP or JavaScript.
I'd like to keep only the string that starts with # or @
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.