.net 避免正则表达式平衡组移出括号
我使用以下正则表达式来匹配引用特定UDF的任何datascript脚本的内容:.net 避免正则表达式平衡组移出括号,.net,regex,balancing-groups,.net,Regex,Balancing Groups,我使用以下正则表达式来匹配引用特定UDF的任何datascript脚本的内容: \[?shared3\]?\.\[?stringsum\]?(((?'Open'\()[^()]*)+((?'Close-Open'\))[^()]*)+)* 它匹配以下任何实例: Shared3.StringSum(<some contents here>) 但是,当输入如下时,我遇到了麻烦: Shared3.StringSum(SomeOtherMethod('input') + AnotherM
\[?shared3\]?\.\[?stringsum\]?(((?'Open'\()[^()]*)+((?'Close-Open'\))[^()]*)+)*
它匹配以下任何实例:
Shared3.StringSum(<some contents here>)
但是,当输入如下时,我遇到了麻烦:
Shared3.StringSum(SomeOtherMethod('input') + AnotherMethod('input')) + ThirdMethod('input')
在最后一个例子中,我的正则表达式还与ThirdMethod('input')
部分匹配
有没有办法修改我的正则表达式,使其在“括号计数”为0时停止匹配?您可以使用
\[?shared3]?\.\[?stringsum]?\(((?>[^()]+|(?'Open'\()|(?'Close-Open'\)))*)\)
见
详细信息
-可选的\[?shared3]?
,[
共享的
,以及可选的
]
-一个点\。
[\[?stringsum]?-可选的
stringsum,
]`,以及可选的
-a\(
(
-第1组:一次或多次出现((?>[^()]+|(?'Open'\()(?'Close-Open'\)*)*)
-1+字符,而不是[^()]+|
和(
,或)
-组“Open”:将(?'Open'\()|
推送到组堆栈中(
-组“Close”和“Open”:从组堆栈中弹出(?'Close-Open'\)
,并将当前级别的子字符串保存到组中)
-一个\)
字符来完成事情)
\[?shared3]?\.\[?stringsum]?\((((((?>[^()])+)(?'Open'\()(?'Close-Open'\))*)\)
,请参阅。很好,这解决了问题。这不是我需要的正则表达式,因为还有一些其他问题,但我能够解决它们。还有什么问题?如果它修复了当前问题,则是有效的解决方案。如果您希望我调整问题,请编辑该问题。这些其他问题与问题范围无关,因此您的答案是正确的。没有理由惊慌:)谢谢!
\[?shared3]?\.\[?stringsum]?\(((?>[^()]+|(?'Open'\()|(?'Close-Open'\)))*)\)