使用VB脚本的多行REGEX

时间:2015-03-31 08:45:22

标签: regex text vbscript

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

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

模式将包含一个变量:

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

我需要从文本文件中捕获第二个'saveAssured'。并且'\ n'(新行)似乎无效。我用过它了吗?我可以尝试其他哪些步骤?

2 个答案:

答案 0 :(得分:1)

  

http://www.regular-expressions.info/dot.html

     

JavaScript和VBScript没有使点匹配的选项   换行符。在这些语言中,您可以使用角色   诸如[\s\S]之类的类来匹配任何字符。这个角色与a匹配   字符,它是一个空白字符(包括换行符)   字符),或不是空白字符的字符。以来   所有字符都是空格或非空格,这个字符   class匹配任何字符。

看看https://regex101.com/r/kH3aZ4/1
测试适用于JavaScript,但由于它们具有相同的Regex风格,因此该模式也适用于VBScript。

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

答案 1 :(得分:0)

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

  

来自Regular Expression Programming (Scripting)   


     

旗帜

     

在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