正常表达2个标签打开和关闭以及许多行

时间:2010-11-29 08:05:46

标签: regex

我正在尝试匹配此块

/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标签。

正则表达式不能处理多行吗?是的我确实触发了多行标志

由于

3 个答案:

答案 0 :(得分:1)

在大多数正则表达式实现中,使用multi-line修饰符的m模式不会让.匹配行中断,但会导致^匹配行的开头并且$匹配一行的结尾。

您需要的是通过添加dot-all修饰符来启用s模式。如果您的语言的正则表达式实现不支持该修饰符(JavaScript不会,如果内存对我有用),您可以使用[\s\S]而不是.(DOT)来模仿它。

请注意,您将遇到以下问题:

嵌套标签:

/code\

/code\

...

\code/

\code/

(匹配的文字:/code\ /code\ ... \code/

或评论标签:

/code\

...

<!-- \code/ -->

\code/

(匹配的文字:/code\ ... <!-- \code/

答案 1 :(得分:0)

使用“global”选项告诉re引擎将整个字符串视为一行。

答案 2 :(得分:0)

你需要加倍你的反斜杠:

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