我在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有问题(表达式很简单)?
答案 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)