Подтвердить что ты не робот

Выражение 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>.

4b9b3361

Ответ 1

Какой механизм регулярных выражений вы используете?

<%(.*?)%>

должен работать с включенной опцией "dot matches newline". Если вы не знаете, как это установить, попробуйте

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

или

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

Вам не нужно бежать <, % или >.

Ответ 2

\<\%(.*?)\%\>. Вам нужно использовать .*? для получения нежелательного соответствия шаблону.

EDIT Чтобы решить многострочную проблему, вы не можете использовать подстановочный знак ., поскольку он соответствует всем, кроме новой строки. Эта опция отличается в зависимости от механизма регулярных выражений. Итак, я могу сказать вам, что делать, если вы скажете мне свой двигатель регулярных выражений.

Ответ 3

Я использую механизм Microsoft Regex (предоставляемый JScript в IE), и у него есть многострочный коммутатор, который влияет на поведение ., но затем у меня были проблемы, с которыми мне приходилось решать, используя [\u0000-\uFFFF], который соответствует всем, включая EOL или любые контрольные символы...

Итак, пойдите с <%([\u0000-\uFFFF]*?)%>