【问题标题】:Multiline REGEX using VB Script使用 VB 脚本的多行正则表达式
【发布时间】:2015-06-04 12:51:47
【问题描述】:

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

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

模式将包含一个变量:

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

我需要从文本文件中捕获第二个“saveAssured”。 '\n' (新行)似乎不起作用。我用对了吗?我还可以尝试哪些其他步骤?

【问题讨论】:

    标签: regex text vbscript


    【解决方案1】:

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

    来自Regular Expression Programming (Scripting)


    >### 标志### 在 JScript 正则表达式 /abc/gim 中,g 指定全局标志,i 指定忽略大小写标志,m 指定多行标志。

    在 VBScript 中,您可以通过将等效属性设置为 True 来指定这些标志。

    下表显示了允许的标志。

    JScript 标志 VBScript 属性 如果标志存在或属性为真


    g Global 在搜索到的字符串中查找所有出现的模式 而不仅仅是第一次出现。 > i IgnoreCase 搜索不区分大小写。 > m 多行 ^ 匹配 \n 或 \r 之后的位置,并且 $ 匹配 \n 或 \r 之前的位置。 > 无论标志是否存在或属性是否为真, ^ 匹配搜索字符串开头的位置, 和 $ 匹配搜索字符串末尾的位置。

    以下是使用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

    【讨论】:

      【解决方案2】:

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

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

      看看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]*?\.([^(]*)\("
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多