代码之家  ›  专栏  ›  技术社区  ›  SSpoke

开闭多行两个标记的正则表达式

  •  0
  • SSpoke  · 技术社区  · 14 年前

    我在试着匹配这个街区

    /code\
    
    int foo(string $bar, int $bleh); Simple function!
    
    bool is_even(mixed $var); Checks if a variable is even.
    
    \code/
    

    我的模式是 "/code\\(.*?)\code/"

    但没有找到匹配项!

    好吧,由于html的所有限制,很难显示stackoverflow中的含义。

    但代码标签基本上是HTML标签,带有更开放和更紧密的标签。

    regex不处理多行吗?是的,我确实触发了多行标志

    谢谢

    3 回复  |  直到 14 年前
        1
  •  1
  •   Bart Kiers    14 年前

    在大多数regex实现中, multi-line 使用的模式 m 修饰符不允许 . 匹配线中断,但会导致 ^ 使线的起点与 $ 匹配一行的结尾。

    你需要的是 dot-all 通过添加 s 修饰语。如果您的语言的regex实现不支持该修饰符(JavaScript不支持,如果内存服务正确的话),您可以使用 [\s\S] 而不是 . (点)。

    请注意,在匹配以下内容时会遇到问题:

    嵌套标记:

    /code\
    
    /code\
    
    ...
    
    \code/
    
    \code/
    

    (匹配文本: /code\ /code\ ... \code/ )

    或注释标记:

    /code\
    
    ...
    
    <!-- \code/ -->
    
    \code/
    

    (匹配文本: /code\ ... <!-- \code/ )

        2
  •  0
  •   Mohamed Nuur    14 年前

    使用“全局”选项告诉重新引擎将整个字符串视为一行。

        3
  •  0
  •   Platinum Azure    14 年前

    你需要把你的一根睫毛翻起来:

    /code\\(.*?)\\code/
                ^--- right here