使用正则表达式匹配参数?

时间:2017-10-03 23:53:11

标签: regex vbscript

我有以下字符串:

"=if(WildMatch(PROD,'A','B','C','D'),PROD,'Other'"

我想提取WildMatch(和第一个逗号(在本例中为PROD)之间的内容) 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您的愿望值应该在第1组:

WildMatch\((.+?),
  • +?量词 - 在一次和无限次之间匹配,尽可能少,根据需要进行扩展( lazy

在此处查看结果:https://regex101.com/r/bQop74/1

答案 1 :(得分:0)

试试这个正则表达式:

\(([^,(]+)(?=,)

Click for Demo

如果你想专门针对WildMatch,你可以使用:

WildMatch\(([^,(\n]+)(?=,)

Click for Demo

解释(对于第一个正则表达式):

  • \( - 按字面意思匹配(
  • ([^,(]+) - 匹配并捕获任何既不是,也不是(的字符的1 +次出现。此组中捕获的数据是您所需要的。
  • (?=,) - 用于验证前面步骤中匹配的内容后跟逗号,
  • 的正面预测

在这两种情况下,您都可以从每个匹配的group1获取所需数据,如下所示:

VBScript代码:

Option Explicit
Dim objRE, strTest, objMatches, match
strTest = "=if(WildMatch(PROD,'A','B','C','D'),PROD,'Other'"
Set objRE = New RegExp
objRE.Global=True
objRE.Pattern="\(([^,(]+)(?=,)"
Set objMatches = objRE.Execute(strTest)
For Each match In objMatches
    MsgBox match.Submatches.Item(0)
Next
Set objMatches = Nothing
Set objRE = Nothing

<强>输出:

enter image description here