regex - PCRE(递归)模式匹配包含正确括号子字符串的字符串。为什么这个会失败?

标签 regex perl pcre

好吧,还有其他方法(嗯……或者更确切地说是可行的方法)来做到这一点,但问题是为什么这个方法会失败?

/
\A              # start of the string
(               # group 1
(?:             # group 2
[^()]*          # something other than parentheses (greedy)
|               # or
\( (?1) \)      # parenthesized group 1
)               # -group 2
+               # at least once (greedy)
)               # -group 1
\Z              # end of the string
/x

无法匹配带有嵌套括号的字符串:“(())”

最佳答案

它不会失败

$ perl junk.pl
matched junk >(())<

$ cat junk.pl
my $junk = qr/
\A              # start of the string
(               # group 1
(?:             # group 2
[^()]*          # something other than parentheses (greedy)
|               # or
\( (?1) \)      # parenthesized group 1
)               # -group 2
+               # at least once (greedy)
)               # -group 1
\Z              # end of the string
/x;

if( "(())" =~ $junk ){
    print "matched junk >$1<\n";
}

关于regex - PCRE(递归)模式匹配包含正确括号子字符串的字符串。为什么这个会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973630/

相关文章:

regex - 为什么 [\n$] 不起作用而 (\n|$) 起作用?

php - 如何将以下表达式从 POSIX 转换为 PCRE?

javascript - 如何避免在以下脚本中使用两次替换(仅使用一个正则表达式)?

python 正则表达式不适用于字符串编码

regex - Perl 正则表达式替换?

regex - perl 正则表达式 - 捕获用空格分隔的四个数字

perl - 为什么在单行中使用 Perl 开关 -nle 时顺序很重要?

java - 确定一对字符串中的任何一个是否结束另一个字符串

javascript - 如何从 url 获取 youtube id,输入提交

c - 如何将 pcre2 修复为\w 将匹配标记?