正则表达式和嵌入的特殊字符

时间:2017-01-20 14:59:18

标签: regex vba

我使用的是VBScript并且有一个我从文件中读取的字符串,例如" ab $ cd \ ef"。

我使用正则表达式替换" c"与" xyz"。这很好。

但替换模式是由用户输入的 - 他们可能决定要替换" b $"与" xyz"。问题在于" b $"意味着"找到一个' b'字符串末尾的字符&​​#34;。

所以我需要能够在用户输入上运行 priming 正则表达式来替换" $"用" \ $"将模式变成" b \ $"

这个pre-regexp的模式需要是" $"和命令:

manPattern = Regexp.Replace(UserInput," \ $&#34)

但当然," $"意味着"字符串结束"。我希望你能看到问题。

有没有办法解决这个问题?我可以通过逐字节搜索手动编辑字符串 - 但是当我们使用正则表达式为我们工作时,这似乎有点不必要。

1 个答案:

答案 0 :(得分:3)

您需要先转义用户字符串。使用以下代码:

Dim regExEscape As New RegExp
With regExEscape
    .pattern = "[-/\\^$*+?.()|[\]{}]"
    .Global = True
    .MultiLine = False
End With

使用用户定义的子模式使用

定义正则表达式时
.pattern = regExEscape.Replace(user_string, "\$&")

[-/\\^$*+?.()|[\]{}]模式包含一个字符类,它匹配您需要在模式中转义的所有可能的元字符,以便将其视为文字字符。它与-/\^$*+?匹配, .()|[]{}以及何时如果您使用\$&替换它,则会在它们之前添加转义\$&是对整个匹配值的反向引用)。