我正在尝试匹配此块
/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标签。
正则表达式不能处理多行吗?是的我确实触发了多行标志
由于
答案 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