使用VB脚本实现多行REGEX

isr3a4wc  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(174)

我有这个文本文件,我需要检查:

} else if ("saveAssured".equals(ACTION))         {
   Integer assuredNo = giisAssuredService.saveAssured(assured);

该模式将包括一个变量:

var = "saveAssured"
reMethod.Pattern = """& var &""[.]equals\(ACTION\).{\n.\w+?.=.\w+?[.](\w+?)\(\w+?\)"

我需要从文本文件捕获第二个“saveAssured”。"\n“(新行)似乎不起作用。我使用的方法是否正确?我还可以尝试其他哪些步骤?

nr7wwzry

nr7wwzry1#

http://www.regular-expressions.info/dot.html
JavaScript和VBScript没有使点匹配换行符的选项。在这些语言中,可以使用字符类(如[\s\S])来匹配任何字符。此字符匹配的字符可以是空白字符(包括换行符)或不是空白字符的字符。由于所有字符都是空白或非空白,该字符类匹配任何字符。
看一下https://regex101.com/r/kH3aZ4/1
Test用于JavaScript,但由于它们具有相同的Regex风格,因此该模式也适用于VBScript。

Dim reMethod
Set reMethod = New RegExp
    reMethod.IgnoreCase = True
    reMethod.Pattern = """saveAssured""\.equals\(ACTION\)[\s\S]*?\{[\s\S]*?\.([^(]*)\("
ttp71kqs

ttp71kqs2#

VBScript表达式中关于多行的信息有点不一致。VBScript RegExp对象确实支持它们,但该属性没有得到很好的说明。

旗帜

在JScript正则表达式/abc/gim中,g指定全局标志,i指定忽略大小写标志,m指定多行标志。
在VBScript中,可以通过将等效属性设置为True来指定这些标志。
下表显示了允许的标志。

**JScript flag**    **VBScript property**    **If flag is present or property is True**

g               Global               Find all occurrences of the pattern in the searched string 
                                     instead of just the first occurrence.

i               IgnoreCase           The search is case-insensitive.

m               Multiline            ^ matches positions following a \n or \r, and
                                     $ matches positions before \n or \r.

                                     Whether or not the flag is present or the property is True, 
                                     ^ matches the position at the start of the searched string, 
                                     and $ matches the position at the end of the searched string.

下面是使用MultiLine的示例。

Option Explicit
Dim rx: Set rx = New RegExp
Dim matches, match
Dim data: data = Array("This is two lines of text", "This is the second line", "Another line")
Dim txt: txt = Join(data, vbCrLf)
With rx
  .Global= True
  .MultiLine = True
  .Pattern= "line$"
End With

Set matches = rx.Execute(txt)
WScript.Echo "Results:"
For Each match In matches
  WScript.Echo match.Value
Next

输出:

Results:
line
line

MultiLine的差值设置为False
输出:
Results: line

相关问题