用于收集方括号()之间的值的正则表达式

时间:2018-08-03 10:04:25

标签: regex vbscript

我有一个像这样的字符串:

((8 eq 'null' or 9 ne 'null') and (1 eq 'uday' ) and (2 eq 'kumar')))

我想先获取8 eq 'null' or 9 ne 'null'并用true或false替换,然后再1 eq 'uday'并用true或false替换,然后再用2 eq 'kumar'替换为true或false。并且我最终求解的表达式应类似于((false或true)以及(true)和(false)))或(false以及true和false)。

有人可以建议我使用正则表达式或任何其他概念的VBScript解决方案吗?

1 个答案:

答案 0 :(得分:1)

使用捕获组定义正则表达式,该捕获组匹配括号之间所有不是括号的内容:

\(([^()]*)\)

\(...\)匹配文字的右括号和右括号。 [^()]*是一个字符类,它匹配除括号零次或多次(*)之外的所有字符。字符类周围的括号是一个捕获组,该捕获组允许通过SubMatches集合在括号之间提取文本而没有括号。

s = "((8 eq 'null' or 9 ne 'null') and (1 eq 'uday' ) and (2 eq 'kumar')))"

Set re = New RegExp
re.Pattern = "\(([^()]*)\)"
re.Global  = True   'find all matches in a string, not just the first one

For Each m In re.Execute(s)
    WScript.Echo m.SubMatches(0)
Next

输出:

8 eq 'null' or 9 ne 'null'
1 eq 'uday'
2 eq 'kumar'

但是,VBScript无法为您评估提取的(子)表达式,因此您需要为此编写更多代码。