RegEx表达式将捕获包括多行块在内的两个字符之间的所有内容

时间:2010-10-22 20:00:25

标签: regex

我想要捕捉所有文字& <%和%>之间的文本块。

例如:

<html>
<head>
<title>Title Here</title>
</head>
<body>
<% include("/path/to/include") %>
<h1>Test Template</h1>
<p>Variable: <% print(second_var) %></p>
<%

variable = value;

foreach(params here)
{
    code here
}

%>
<p><a href="/" title="Home">Home</a></p>
</body>
</html>

我尝试了\<\%(.*)\%\>,但这也会捕获包括<h1>Test Template</h1>阻止在内的所有内容。

3 个答案:

答案 0 :(得分:41)

您使用的是哪个正则表达式引擎?

<%(.*?)%>

应该启用“点匹配换行符”选项。如果您不知道如何设置,请尝试

<%([\s\S]*?)%>

(?s)<%(.*?)%>

顺便说一句,无需逃离<%>

答案 1 :(得分:7)

\<\%(.*?)\%\>。您需要使用.*?来获得非贪婪的模式匹配。

编辑要解决多线问题,您无法使用.通配符,因为它匹配除换行之外的所有内容。此选项因正则表达式引擎而异。所以,如果你告诉我你的正则表达式引擎,我可以告诉你怎么做。

答案 2 :(得分:2)

我一直在使用微软的Regex引擎(由IE中的JScript提供),它有一个“多线”开关,影响.的行为,但是我仍然遇到了问题解决使用匹配所有[\u0000-\uFFFF],包括EOL或任何控制字符......

请跟<%([\u0000-\uFFFF]*?)%>

一起去吧