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

Lar*_*ark 14 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>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了,\<\%(.*)\%\>但这将捕获包括<h1>Test Template</h1>块在内的所有内容.

Tim*_*ker 42

你使用哪个正则表达式引擎?

<%(.*?)%>
Run Code Online (Sandbox Code Playgroud)

应该使用"点匹配换行符"选项.如果您不知道如何设置,请尝试

<%([\s\S]*?)%>
Run Code Online (Sandbox Code Playgroud)

要么

(?s)<%(.*?)%>
Run Code Online (Sandbox Code Playgroud)

无需逃避<,%>顺便说一下.


Raf*_*ler 7

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

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