我在编写正则表达式时遇到了问题(在Ruby中,但我不认为它会改变任何东西)选择所有正确的主题标签。
我使用了( /(^|\s)(#+)(\w+)(\s|$)/ )
,它不起作用,我不明白为什么。
在这个例子中:
#start #middle #middle2 #middle3 bad#example #another#bad#example #end
它应标记#start
,#middle
,#middle2
,#middle3
和#end
。
为什么我的代码不起作用,正确的正则表达式应该怎样?
答案 0 :(得分:4)
至于为什么原来不起作用让我们看看每一位
(^|\s)
行首或空格(#+)
一个或多个#
(\w+)
一个或多个字母数字字符(\s|$)
空格或行尾主要问题是1和4之间的冲突。当1匹配空格时,最后一组中的空格已经匹配为第4部分。因此1不存在,匹配移动到下一个可能的
4并不是真的需要,因为3与空格不匹配。
所以这是结果
(?:^|\s)#(\w+)
答案 1 :(得分:1)
[^#\w](#[\w]*)|^(#[\w]*)
有效吗?
获得一个#不跟随一个角色,捕捉所有内容,直到没有一个字。
或者case处理第一个char为#
的情况。
答案 2 :(得分:0)
这对你有用吗?
(#[^\s+]+)
这说找到一个哈希标记然后是空格。
答案 3 :(得分:0)