我有一个像这样的字符串:
((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解决方案吗?
答案 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无法为您评估提取的(子)表达式,因此您需要为此编写更多代码。