我想要捕捉所有文字& <%和%>之间的文本块。
例如:
<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>
阻止在内的所有内容。
答案 0 :(得分:41)
您使用的是哪个正则表达式引擎?
<%(.*?)%>
应该启用“点匹配换行符”选项。如果您不知道如何设置,请尝试
<%([\s\S]*?)%>
或
(?s)<%(.*?)%>
顺便说一句,无需逃离<
,%
或>
。
答案 1 :(得分:7)
\<\%(.*?)\%\>
。您需要使用.*?
来获得非贪婪的模式匹配。
编辑要解决多线问题,您无法使用.
通配符,因为它匹配除换行之外的所有内容。此选项因正则表达式引擎而异。所以,如果你告诉我你的正则表达式引擎,我可以告诉你怎么做。
答案 2 :(得分:2)
我一直在使用微软的Regex引擎(由IE中的JScript提供),它有一个“多线”开关,影响.
的行为,但是我仍然遇到了问题解决使用匹配所有的[\u0000-\uFFFF]
,包括EOL或任何控制字符......
请跟<%([\u0000-\uFFFF]*?)%>