【问题标题】:Can't escape the backslash with regex?不能用正则表达式转义反斜杠?
【发布时间】:2022-07-07 15:23:22
【问题描述】:

我正在使用以下正则表达式

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$

我知道它很丑陋,但到目前为止,它的用途除了我认为应该因为它被转义而不允许使用反斜杠之外,我还尝试了\\ 而不是\\\,但结果相同。有任何想法吗?

【问题讨论】:

  • 我刚刚修正了标题中的错字,但标题“无法用正则表达式逃避反弹?”有一些非常棒的地方。的确!
  • @AdamCrossland 难道我们不都希望正则表达式可以帮助我们摆脱强烈反对吗? >_>
  • 哎呀,我只是希望我能摆脱正则表达式的强烈反对。

标签: regex


【解决方案1】:

如果您将它放在程序中的字符串中,您实际上可能需要使用四个反斜杠(因为字符串解析器将在“反转义”时删除其中两个细绳,然后正则表达式需要两个用于转义的正则表达式反斜杠)。

例如:

regex("\\")

被解释为...

regex("\" [escaped backslash] followed by "\" [escaped backslash])

被解释为...

regex(\)

被解释为匹配单个反斜杠的正则表达式。


根据语言的不同,您可能能够使用不解析转义序列的不同形式的引用来避免必须使用尽可能多的引用 - 例如,在 Python 中:

re.compile(r'\')

引号前的r 使其成为生的不解析反斜杠转义的字符串。

【讨论】:

  • 呵呵...我刚遇到这个,需要添加三个。我只是不断添加反斜杠,直到它起作用。
  • 嗯,为什么这个正则表达式被重新解释了两次,而不是像 PCRE 应该的那样重新解释一次?
  • @JimMichaels,因为并非所有语言都具有未转义的正则表达式文字,因此有时编程语言本身会在其字符串语法中解释一次斜杠转义,然后将生成的字符串传递给正则表达式引擎(它在正则表达式语法中解释斜杠转义)。
  • 很久以前,我必须捕获一个元素的 xpath,该元素的唯一标识特征是 windows 文件路径,然后生成一个程序(作为字符串),其中 xpaths 表示为字符串。在中间步骤的某一时刻,有 8 个反斜杠用于表示文件路径中的单个反斜杠。这是我所获得的最高水平。
  • 在搜索反斜杠以及需要元字符的模式时,这可能会变得更加复杂。举个例子,找到一个反斜杠后跟一个数字。现在你会盯着下面的表达式试图弄清楚发生了什么:new RegExp('\\\d');
【解决方案2】:

如果它不是文字,则必须使用 \\ 才能得到 \ ,这意味着转义的反斜杠。

那是因为有两种表示。在您的正则表达式的字符串表示中,您有"\\",这是发送到解析器的内容。解析器将看到\,它将其解释为有效的转义反斜杠(匹配单个反斜杠)。

【讨论】:

    【解决方案3】:

    反斜杠 是正则表达式的转义字符。因此,双反斜杠确实意味着单个字面反斜杠。

    (backslash) followed by any of [^$.|?*+(){} escapes the special character to suppress its special meaning.

    参考:http://www.regular-expressions.info/reference.html

    【讨论】:

    • 简单的解释
    【解决方案4】:

    来自http://www.regular-expressions.info/charclass.html

    请注意,字符类中唯一的特殊字符或元字符是右括号 (])、反斜杠 (\)、插入符号 (^) 和连字符 (-)。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。要搜索星号或加号,请使用 [+*]。如果您在字符类中转义常规元字符,您的正则表达式将正常工作,但这样做会显着降低可读性。

    要在字符类中包含反斜杠作为没有任何特殊含义的字符,您必须使用另一个反斜杠对其进行转义。 [\x] 匹配反斜杠或 x。右括号 (])、插入符号 (^) 和连字符 (-) 可以通过用反斜杠转义它们或将它们放在不具有特殊含义的位置来包含。我推荐后一种方法,因为它提高了可读性。要包含插入符号,请将其放置在左括号之后以外的任何位置。 [x^] 匹配 x 或插入符号。您可以将右括号放在左括号或否定插入符号之后。 []x] 匹配右括号或 x。 [^]x] 匹配任何不是右括号或 x 的字符。连字符可以在左括号之后,右括号之前,或者在否定插入符号之后。 [-x] 和 [x-] 都匹配 x 或连字符。

    你用什么语言写正则表达式?

    【讨论】:

      【解决方案5】:

      您可以使用 ?最后跳过一个“”

      regex("\\?")
      

      【讨论】:

        【解决方案6】:

        此解决方案解决了我的问题,同时将 br 标签替换为 ' ' .

        alert(content.replace(/<br/>/g,'
        '));
        

        【讨论】:

          【解决方案7】:

          在某些情况下,可以使用 . 而不是 并避免转义反斜杠

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-04-30
            • 2012-02-25
            • 2012-06-01
            • 2011-08-29
            相关资源
            最近更新 更多