Regex 什么';使用perl在一行中查找两组括号的正则表达式是什么?

Regex 什么';使用perl在一行中查找两组括号的正则表达式是什么?,regex,perl,Regex,Perl,我有不同括号集的行。比如说 (sdfsfs) (sfdsfd) (sdfsfs) (sfdsfd) (sfdsfd) (sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd) (sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd) (sfdsfd) (sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd) (sfdsfd) 什么样的正则表达式可以只查找带有两组括号的行?在我上面的例子中,第一行

我有不同括号集的行。比如说

     (sdfsfs) (sfdsfd) 
     (sdfsfs) (sfdsfd) (sfdsfd) 
     (sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd)
     (sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd) (sfdsfd)
     (sdfsfs) (sfdsfd) (sfdsfd) (sfdsfd) (sfdsfd) 
什么样的正则表达式可以只查找带有两组括号的行?在我上面的例子中,第一行

当用户尝试使用此正则表达式时

/\(.*\) \(.*\)/

它将返回所有行

您可以使用此正则表达式来匹配正好包含两个括号集的行:

m/^(\([^)]*\)\s*){2}$/
或:


[^)]*
将匹配除
以外的任何字符,并且比
*?
*

效率更高。您可以使用此正则表达式匹配一行,其中正好有两个括号集:

m/^(\([^)]*\)\s*){2}$/
^(?:\s*\([^\)(]*\)\s*){2}$
或:

[^)]*
将匹配除
以外的任何字符,并且比
*?
*
更有效

^(?:\s*\([^\)(]*\)\s*){2}$
您可以使用锚来定义此模式。请参阅演示

您可以使用锚来定义此模式。请参阅演示


这是一个更好的解决方案

while ( $text =~ //(?m)^(?=(?:.*?(?&parens)){2})(?!(?:.*?(?&parens)){3}).+$(?(DEFINE)(?<parens>\([^)\n]*\)))/g )
{
    print $&,"\n";
}
while($text=~/(?m)^(=(?:.*(?&parens)){2}(?!(?:.*(?&parens)){3})。+$(?(DEFINE)(?\([^)\n]*\)/g)
{
打印$&,“\n”;
}

(?m)#多线模式
^#博尔
(?=#必须是2个帕伦块
(?:
.*(?&parens)
){2}
)
(?!#不能是3个paren块
(?:
.*(?&parens)
){3}
)
.+#拿到整条线
$#下线
(?(定义)
(?\([^)\n]*\)#(1)
)

这是一个更好的解决方案

while ( $text =~ //(?m)^(?=(?:.*?(?&parens)){2})(?!(?:.*?(?&parens)){3}).+$(?(DEFINE)(?<parens>\([^)\n]*\)))/g )
{
    print $&,"\n";
}
while($text=~/(?m)^(=(?:.*(?&parens)){2}(?!(?:.*(?&parens)){3})。+$(?(DEFINE)(?\([^)\n]*\)/g)
{
打印$&,“\n”;
}

(?m)#多线模式
^#博尔
(?=#必须是2个帕伦块
(?:
.*(?&parens)
){2}
)
(?!#不能是3个paren块
(?:
.*(?&parens)
){3}
)
.+#拿到整条线
$#下线
(?(定义)
(?\([^)\n]*\)#(1)
)

@HåkonHægland-不太可能。它完全受限制。必须至少有2个区块,不能有3个或更多。基本上它的
如果(x>=2&&x<3),x_uu必须等于2
是的,我意识到了,所以我删除了我的评论。。当你说这是一个更好的解决方案时,你是指其他答案吗?@HåkonHægland-绝对是。为了简洁起见,把它留在这里。有人会从中得到一些东西。@HåkonHægland-不太可能。它完全受限制。必须至少有2个区块,不能有3个或更多。基本上它的
如果(x>=2&&x<3),x_uu必须等于2
是的,我意识到了,所以我删除了我的评论。。当你说这是一个更好的解决方案时,你是指其他答案吗?@HåkonHægland-绝对是。为了简洁起见,把它留在这里。有人会从中得到一些东西。