如何编写匹配正则表达式的#标签

时间:2015-03-19 22:30:26

标签: ruby regex

我在编写正则表达式时遇到了问题(在Ruby中,但我不认为它会改变任何东西)选择所有正确的主题标签。

我使用了( /(^|\s)(#+)(\w+)(\s|$)/ ),它不起作用,我不明白为什么。

在这个例子中:

#start #middle #middle2 #middle3 bad#example #another#bad#example #end

它应标记#start#middle#middle2#middle3#end

为什么我的代码不起作用,正确的正则表达式应该怎样?

4 个答案:

答案 0 :(得分:4)

至于为什么原来不起作用让我们看看每一位

  1. (^|\s)行首或空格
  2. (#+)一个或多个#
  3. (\w+)一个或多个字母数字字符
  4. (\s|$)空格或行尾
  5. 主要问题是1和4之间的冲突。当1匹配空格时,最后一组中的空格已经匹配为第4部分。因此1不存在,匹配移动到下一个可能的

    4并不是真的需要,因为3与空格不匹配。

    所以这是结果

    (?:^|\s)#(\w+)
    

    https://regex101.com/r/iU4dZ3/3

答案 1 :(得分:1)

[^#\w](#[\w]*)|^(#[\w]*)有效吗?

获得一个#不跟随一个角色,捕捉所有内容,直到没有一个字。

或者case处理第一个char为#的情况。

现场演示:http://regexr.com/3al01

答案 2 :(得分:0)

这对你有用吗?

(#[^\s+]+)

这说找到一个哈希标记然后是空格。

答案 3 :(得分:0)

还有一个正则表达式:

\B#\w+\b

这个没有捕获空白......

https://regex101.com/r/iU4dZ3/4