Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 避免正则表达式平衡组移出括号_.net_Regex_Balancing Groups - Fatal编程技术网

.net 避免正则表达式平衡组移出括号

.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

我使用以下正则表达式来匹配引用特定UDF的任何datascript脚本的内容:

\[?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
  • ((?>[^()]+|(?'Open'\()(?'Close-Open'\)*)*)
    -第1组:一次或多次出现
    • [^()]+|
      -1+字符,而不是
      ,或
    • (?'Open'\()|
      -组“Open”:将
      推送到组堆栈中
    • (?'Close-Open'\)
      -组“Close”和“Open”:从组堆栈中弹出
      ,并将当前级别的子字符串保存到组中
  • \)
    -一个
    字符来完成事情

试试
\[?shared3]?\.\[?stringsum]?\((((((?>[^()])+)(?'Open'\()(?'Close-Open'\))*)\)
,请参阅。很好,这解决了问题。这不是我需要的正则表达式,因为还有一些其他问题,但我能够解决它们。还有什么问题?如果它修复了当前问题,则是有效的解决方案。如果您希望我调整问题,请编辑该问题。这些其他问题与问题范围无关,因此您的答案是正确的。没有理由惊慌:)谢谢!
\[?shared3]?\.\[?stringsum]?\(((?>[^()]+|(?'Open'\()|(?'Close-Open'\)))*)\)