我使用正则表达式在字符串中查找主题标签:\B#[a-z0-9_-]+
。
我使用\B
因为我希望匹配仅以#
开头的字词,例如hello #there
而不是hello#there
。
效果很好并且匹配主题标签
但它也错误地匹配那些在#
之前具有@
,$
或#
符号的事件,例如##some
,@#some
或{{1 }}。
我做错了什么?
这是我的正则表达式:https://regex101.com/r/spdAyj/2
答案 0 :(得分:2)
由于#
的左侧必须有空格或字符串的开头,因此您可以使用前导空白边界:
(?<!\S)#[a-z0-9_-]+
请参阅regex demo。
如果当前位置左侧有非空白字符,则(?<!\S)
为否定匹配lookbehind。基本上,它是(?<=^|\s)
/ (?<=\A|\s)
的更短,更高效(更便携)的版本。