【问题标题】:Escaping Parentheses in Regex正则表达式中的转义括号
【发布时间】:2014-05-14 16:03:51
【问题描述】:

我有一个正则表达式,末尾有可选的锚点,例如

(\.|,|\/)

我正在尝试添加“)”,但如果我逃避它

(/.|,|\/|\))

找不到它,如果不转义,它会被视为表达式的一部分,并且由于没有打开的括号而失败。我怎样才能逃脱它,以便将其视为一个字符并找到?

【问题讨论】:

  • 为什么把\.改成/.?您可以添加示例输入/输出吗?
  • 你的问题不清楚(至少对我来说)。我认为您没有正确使用术语anchors,而且我看不出缺少的左括号与它有什么关系。您能否发布一些带有输入/预期输出/观察到的输出的实际代码?如果代码中不清楚,还请说明您使用的是哪个正则表达式引擎。

标签: regex


【解决方案1】:

\) 是转义括号的正确方法。确保正确转义字符串文字中的 \(\\)。

【讨论】:

  • 如果我理解你的意思正确,我认为“确保你是正确的斜线。正确的方法是使用字符串`\`”更清楚。
【解决方案2】:

如果您想匹配一组字符中的一个,最好使用character class。而且在这样一个类中,大多数转义规则都不适用。

所以要匹配点、逗号、斜线或右括号,您可以使用

[.,/)]

【讨论】:

    【解决方案3】:

    替代解决方案

    使用十六进制代码可以更容易地代替集合。此代码不需要C# 转义

    示例

    ( 的十六进制代码是 \x28,对应的 )\x29

    在模式中使用会看起来像这样完全在括号之间找到任何东西

    \x28[^\x29]+\x29 转义为\)[^)]+\)

    或以不同的方式搜索:

    \x28.+?\x29

    之前的所有模式都可以匹配:

    (abc)


    我还在我的正则表达式模式中将它用于双引号 (\x22) 和单引号 (\x27),即撇号。

    它只是让 C# 编码时更容易使用正则表达式模式。

    【讨论】:

      【解决方案4】:

      您的正则表达式应如下所示: (\.|,|\/|\))

      http://rubular.com/测试一下

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 2023-01-11
        • 1970-01-01
        • 1970-01-01
        • 2016-08-12
        相关资源
        最近更新 更多