【问题标题】:Regular Expression and embedded special characters正则表达式和嵌入的特殊字符
【发布时间】:2017-01-20 23:27:05
【问题描述】:

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

我使用正则表达式将“c”替换为“xyz”。效果很好。

但是替换模式是由用户输入的——他们可能决定用“xyz”替换“b$”。问题是“b$”的意思是“在字符串的末尾找到一个'b'字符”。

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

我的这个预正则表达式的模式需要是“$”,并且命令:

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

当然,“$”表示“字符串结尾”。我希望你能看到问题。

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

【问题讨论】:

    标签: regex vba


    【解决方案1】:

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

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

    并且在使用用户定义的子模式定义正则表达式时使用

    .pattern = regExEscape.Replace(user_string, "\$&")
    

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

    【讨论】:

    • stribizew 这行得通 - 但我不知道为什么 - 你能解释一下吗?
    • 我现在必须赶时间......我现在将尝试添加一些简短的解释。如果有什么不明白的地方告诉我,我稍后会尝试更新。
    • 这很有道理@Wiktor - 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2018-06-13
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多