Выражение 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>
.
Ответы
Ответ 1
Какой механизм регулярных выражений вы используете?
<%(.*?)%>
должен работать с включенной опцией "dot matches newline". Если вы не знаете, как это установить, попробуйте
<%([\s\S]*?)%>
или
(?s)<%(.*?)%>
Вам не нужно бежать <
, %
или >
.
Ответ 2
\<\%(.*?)\%\>
. Вам нужно использовать .*?
для получения нежелательного соответствия шаблону.
EDIT Чтобы решить многострочную проблему, вы не можете использовать подстановочный знак .
, поскольку он соответствует всем, кроме новой строки. Эта опция отличается в зависимости от механизма регулярных выражений. Итак, я могу сказать вам, что делать, если вы скажете мне свой двигатель регулярных выражений.
Ответ 3
Я использую механизм Microsoft Regex (предоставляемый JScript в IE), и у него есть многострочный коммутатор, который влияет на поведение .
, но затем у меня были проблемы, с которыми мне приходилось решать, используя [\u0000-\uFFFF]
, который соответствует всем, включая EOL или любые контрольные символы...
Итак, пойдите с <%([\u0000-\uFFFF]*?)%>