我的行有不同的括号。例如
(sdfsfs) (sfdsfd)
(sdfsfs) (sfdsfd) (sfdsfd)
(sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd)
(sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd) (sfdsfd)
(sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd) (sfdsfd)
正则表达式只能找到包含两组括号的行?在上面的例子中,第一行。
试试这个正则表达式时
/\(.*\) \(.*\)/
返回所有行
答案 0 :(得分:3)
您可以使用此正则表达式来匹配具有2个括号集的行:
m/^(\([^)]*\)\s*){2}$/
OR:
m/^\([^)]*\)\s*\([^)]*\)$/
[^)]*
将匹配)
以外的任何字符,效率高于.*?
或.*
。
答案 1 :(得分:1)
这是一个更好的解决方案。
while ( $text =~ //(?m)^(?=(?:.*?(?&parens)){2})(?!(?:.*?(?&parens)){3}).+$(?(DEFINE)(?<parens>\([^)\n]*\)))/g )
{
print $&,"\n";
}
(?m) # Multi-line mode
^ # BOL
(?= # Must be 2 paren's blocks
(?:
.*? (?&parens)
){2}
)
(?! # Cannot be 3 paren's blocks
(?:
.*? (?&parens)
){3}
)
.+ # Get the entire line
$ # EOL
(?(DEFINE)
(?<parens> \( [^)\n]* \) ) # (1)
)
答案 2 :(得分:0)