【发布时间】:2016-03-15 00:28:29
【问题描述】:
如何使用 perl 正则表达式提取最外圆括号内的内容?
文本 = (-(A + (B - C)))
输出 = -(A + (B - C))
谢谢
【问题讨论】:
标签: regex perl nested expression parentheses
如何使用 perl 正则表达式提取最外圆括号内的内容?
文本 = (-(A + (B - C)))
输出 = -(A + (B - C))
谢谢
【问题讨论】:
标签: regex perl nested expression parentheses
可以用这个(\(((?:[^()]++|(?1))*)\))完成,有几个
方法来做到这一点。
( # (1 start), Recursion code group
\( # Opening (
( # (2 start), Capture, inner core
(?: # Cluster group
[^()]++ # Possesive, not parenth's
| # or,
(?1) # Recurse to group 1
)* # End cluster, do 0 to many times
) # (2 end)
\) # Closing )
) # (1 end)
输出
** Grp 0 - ( pos 4 , len 16 )
(-(A + (B - C)))
** Grp 1 - ( pos 4 , len 16 )
(-(A + (B - C)))
** Grp 2 - ( pos 5 , len 14 )
-(A + (B - C))
【讨论】:
\( ( [^()]* (?: \( (?1) \) [^()]* )* ) \)
++ 应该使它们几乎相同
我认为除了这个之外没有其他要求
use strict;
use warnings 'all';
my $text = "(-(A + (B - C)))";
my ($result) = $text =~ / \( (.*) \) /x;
print $result, "\n";
-(A + (B - C))
该模式捕获从第一个左括号之后到最后一个右括号之前的所有内容。从你的问题来看,我认为不需要检查琴弦是否平衡
【讨论】: