2

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

\[?shared3\]?\.\[?stringsum\]?(((?'Open'\()[^()]*)+((?'Close-Open'\))[^()]*)+)*

它匹配以下任何实例:

Shared3.StringSum(<some contents here>)

使用平衡组,我还尝试支持以下案例:

Shared3.StringSum(SomeOtherMethod('input') + AnotherMethod('input'))

但是,当输入如下时,我遇到了麻烦:

Shared3.StringSum(SomeOtherMethod('input') + AnotherMethod('input')) + ThirdMethod('input')

在最后一种情况下,我的正则表达式也匹配该ThirdMethod('input')部分。

有什么办法可以改变我的正则表达式,所以只要“括号计数”为0,它就会停止匹配?

4

1 回答 1

3

您可以使用

\[?shared3]?\.\[?stringsum]?\(((?>[^()]+|(?'Open'\()|(?'Close-Open'\)))*)\)

查看正则表达式演示

细节

  • \[?shared3]?- 一个可选[shared, 和一个可选的]
  • \.- 一个点
  • \[?stringsum]? - an optional[,字符串, and an optional]`
  • \(- 一种(
  • ((?>[^()]+|(?'Open'\()|(?'Close-Open'\)))*)- 第 1 组:出现一次或多次
    • [^()]+|- 1+ 字符除(and ), 或
    • (?'Open'\()|- 组“打开”:推(入组堆栈
    • (?'Close-Open'\))- 组“关闭”和“打开”:)Open组堆栈中弹出并将当前级别子字符串保存到Close组中
  • \)-)完成任务的字符
于 2020-04-20T15:00:38.920 回答