正则表达式保持/匹配任何以某个字符开头的单词

时间:2012-06-23 16:50:44

标签: php javascript regex

我想只保留以#或@

开头的字符串
  1. foobar @sushi - wasabi
  2. foobar #sushi - 辣根
  3. 因此,仅匹配 @susui 或删除其周围的文字。 PHP或JavaScript。

1 个答案:

答案 0 :(得分:4)

根据您定义“单词”的方式,您可能需要

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

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

<强>解释

(?<=\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.

所以,在PHP中:

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

为您提供字符串$result中所有匹配项的数组$subject。在JavaScript中,这不起作用,因为不支持lookbehinds(正则表达式开头的“Assert ...”部分)。