这是我的模板:(TABLE[0-9]+)\(((?<=\()(.*?)(?=\)))[(?=\))\)]
这是我正在查看的字符串:(TABLE3(1.6+TABLE1(2)))*TABLE2(1)*TABLE11(1)*(1.19017735023328)
我得到的是:
我需要第一个:TABLE3(1.6 + TABLE1(2))
我该怎么做?
答案 0 :(得分:3)
在TABLE[0-9]+
之后使用here构造:
TABLE[0-9]+\((?>[^()]|(?<o>)\(|(?<-o>)\))*(?(o)(?!))\)
请参阅balancing group。
<强>详情
TABLE[0-9]+
- 匹配TABLE
和1+位数\(
- 开放(
(?>[^()]|(?<o>)\(|(?<-o>)\))*
- 零次或多次出现
[^()]
- 除(
和)
|
- 或(?<o>)\(
- (
(并增加o
组的堆栈)|
- 或(?<-o>)\)
- )
(并递减o
组的堆栈)(?(o)(?!))
- 如果组o
堆栈不为空,则失败匹配(触发回溯)\)
- )
。