【问题标题】:How do I match a square bracket literal using RegEx?如何使用 RegEx 匹配方括号文字?
【发布时间】:2010-09-25 20:05:03
【问题描述】:

匹配方括号的正则表达式是什么?我在eregi_replace 中的模式中使用\\],但它似乎无法找到]...

【问题讨论】:

  • 我实际上是在尝试匹配新行(或新的 html 行 - 也可能在

    之后)上的东西,它的开头有一个 @ 之前没有任何内容。 ..

标签: php regex string


【解决方案1】:

\] 是正确的,但请注意 PHP 本身也有 \ 作为转义字符,因此您可能必须使用 \\[(或其他类型的字符串文字)。

【讨论】:

    【解决方案2】:

    有两种方法:

    / [\]] /x;
    
    /  \]  /x;
    

    虽然您可能认为后者是更好的选择,但实际上我会考虑在更简单的正则表达式中使用它。我会考虑前者,这是更大的正则表达式的更好选择。考虑以下几点:

    / (\w*) (  [\d\]] ) /x;
    
    / (\w*) ( \d | \] ) /x;
    

    在本例中,前者是我的首选解决方案。它在组合单独的实体方面做得更好,这些实体可能在给定的位置都匹配。它还可能具有一些速度优势,具体取决于实施情况。

    注意:这是 Perl 语法,部分是为了确保正确突出显示。
    在 PHP 中,您可能需要在反斜杠上加倍。 "[\\]]""\\]"

    【讨论】:

      【解决方案3】:

      您无需对其进行转义:如果被隔离, ] 将被视为常规字符。
      用 eregi_replace 和 preg_replace 测试。

      [ 是另一种野兽,你必须逃脱它。对于两个正则表达式系列,PHP 似乎都将单引号和双引号、单引号或双引号都视为相同的。

      也许你的问题在你表达的其他地方,你应该完整地给出它。

      【讨论】:

        【解决方案4】:

        您的问题可能来自您使用 eregi_replace 的事实,第一个参数用简单的引号括起来:

         '\['
        

        不过,在 double quotes 中,它可能会根据上下文运行良好,因为它 changes the way the parameter 被传递给函数(简单的引号只是传递字符串而没有任何解释,因此需要加倍为“\”字符)。

        这里,如果"\["被解释为转义字符,你仍然需要加倍“\”。

        注意:根据您的评论,您可以尝试正则表达式

        <\s*(?:br|p)\s*\/?\s*\>\s*\[
        

        为了在&lt;br&gt;&lt;p&gt;之后检测[

        【讨论】:

        • 我不关注你...我 am 在我的代码中使用双引号,但它不起作用。
        • 我会反过来说,在单引号中,反斜杠是一个和其他字符一样的字符,除了在反斜杠和单引号之前,IIRC。
        • 刚试了Bombe的代码,和'\]'、'\\]'、"\]"和"\\]"都可以正常工作...实际上,]不需要转义如果没有 [ 在它之前。
        【解决方案5】:

        在 .Net 中,您可以通过添加反斜杠来转义特殊字符; “\”表示它会变成; “[”...

        虽然您通常在 字符串文字 中执行此操作,但您要么必须执行此类操作;

        @"\["
        

        或类似的东西;

        "\\["
        

        【讨论】:

        • 对不起,那我帮不了你了 :( 虽然 RegEx 语法应该大多类似......
        【解决方案6】:

        完美运行:

        <?php
            $hay = "ab]cd";
            echo eregi_replace("\]", "e", $hay);
        ?>
        

        输出:

        abecd
        

        【讨论】:

          猜你喜欢
          • 2011-12-15
          • 2019-09-26
          • 2019-01-04
          • 1970-01-01
          • 2018-04-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多