正则表达式在另一个带括号的字符串中查找带括号的字符串

[英]Regex finding string with parenthesis in another string with parenthesis


this is my patten: (TABLE[0-9]+)\(((?<=\()(.*?)(?=\)))[(?=\))\)]

这是我的彭定康:(表[0 - 9]+)\(((? < = \()(. * ?)(? = \)))((? = \))\]

this is the string i'm looking at: (TABLE3(1.6+TABLE1(2)))*TABLE2(1)*TABLE11(1)*(1.19017735023328)

这是我正在查看的字符串:(表3(1.6+表1(2)))*表2(1)*表11(1)*(1.19017735023328)

what i get are:

我得到的是:

  • TABLE3(1.6+TABLE1(2)
  • TABLE3(1.6 +表1(2)
  • TABLE2(1)
  • 表二(1)
  • TABLE11(1)
  • TABLE11(1)

i need the first one to be: TABLE3(1.6+TABLE1(2))

我需要第一个为:TABLE3(1.6+TABLE1(2))

how can i do that?

我怎么做呢?

1 个解决方案

#1


3  

Use a balancing group construct after TABLE[0-9]+:

使用表[0-9]+后的平衡组结构:

TABLE[0-9]+\((?>[^()]|(?<o>)\(|(?<-o>)\))*(?(o)(?!))\)

See the regex demo.

查看演示正则表达式。

enter image description here

Details

细节

  • TABLE[0-9]+ - matches TABLE and 1+ digits
  • 表[0-9]+ -匹配表和1+位
  • \( - an open (
  • \(-一个开放的(
  • (?>[^()]|(?<o>)\(|(?<-o>)\))* - zero or more occurrences of
    • [^()] - any char but ( and )
    • [^()]——任何字符,但(和)
    • | - or
    • |——或者
    • (?<o>)\( - a ( (and increments the stack of the o group)
    • (? )\(- a(增加o组的堆栈)
    • | - or
    • |——或者
    • (?<-o>)\) - a ) (and decrements the stack of the o group)
    • (?<-o>)\ a)(对o组的堆栈进行递减)
  • (? >[^())|(? < o >)\(|(? < o >)\))* -零个或多个出现[^()]——任何字符,但(和)| -或(? < o >)\(-((和增量的堆栈o组)|——或者(? < o >)\)- a)(和堆栈的精神性的o组)
  • (?(o)(?!)) - fail the match (triggers backtracking) if Group o stack is not empty
  • (?(o)(?!)——如果组o堆栈不是空的,则失败匹配(触发回溯)
  • \) - a ).
  • \)- a)。

注意!

本站翻译的文章,版权归属于本站,未经许可禁止转摘,转摘请注明本文地址:http://www.silva-art.net/blog/2017/08/28/f036101de6ff2213a4093b1221231905.html



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告