为什么我的红宝石正则表达式永远不会停止?

时间:2014-08-05 03:35:29

标签: ruby regex

我在ruby中写的正则表达式有问题:

reg = /\([^\(|\)]{5,}*\)/i #almost 5 caracters inside two parenthesis.
one_string = "(  foobarbaz, foobarbaz  "
one_string.match(reg)#works fine and return nil

one_string = "(  foobarbaz, foobarbaz,  foobarbaz, foobarbaz foobarbaz, foobarbaz, foobarbaz, foobarbaz  foobarbaz "
one_string.match(reg) # never stop if one_string is to long.

括号未在one_string中关闭。如果我想匹配的字符串很长,匹配函数似乎不会停止。我应该以不同的方式编写正则表达式,还是ruby有问题(表达式很简单)?

1 个答案:

答案 0 :(得分:1)

这里的正则表达式语法不正确。

\(               # match '('
[^\(|\)]{5,}     # match any character except: '\(', '|', '\)' (at least 5 times)

然后它在*量词上失败,因为前面的标记是不可量化的。此外,您可以删除i标记,因为您没有匹配正则表达式中的任何单词字符。

我不清楚你到底想要做什么,但你可能正在寻找这样的事情。

reg = /\([^()]{5,}\)?/ 

如果您只想尝试匹配之间的所有内容,我仍然不理解这个概念:

reg = /\([^()]*\)?/

说明:

\(        # match '('
[^()]*    # any character except: '(', ')' (0 or more times)
\)?       # ')' (optional)