仅在字符串开头或空格后匹配

时间:2018-04-06 07:48:45

标签: regex

我使用正则表达式在字符串中查找主题标签:\B#[a-z0-9_-]+

我使用\B因为我希望匹配仅以#开头的字词,例如hello #there而不是hello#there

效果很好并且匹配主题标签 但它也错误地匹配那些在#之前具有@$#符号的事件,例如##some@#some或{{1 }}。

我做错了什么?

这是我的正则表达式:https://regex101.com/r/spdAyj/2

1 个答案:

答案 0 :(得分:2)

由于#的左侧必须有空格或字符串的开头,因此您可以使用前导空白边界:

(?<!\S)#[a-z0-9_-]+

请参阅regex demo

如果当前位置左侧有非空白字符,则(?<!\S)为否定匹配lookbehind。基本上,它是(?<=^|\s) / (?<=\A|\s)的更短,更高效(更便携)的版本。