正则表达式匹配不是单行并扩展到多行的结果
Regex to match a result that isn't single line and expanded across multiple lines
我想更改 /<\?php\s([\s\S]*?)\?>/gi
排除单行 PHP 标签的方式。
例如,这里我只想匹配第二个 PHP 标签而不是第一个:
Test number <?PHP echo($a);?> is here.
This is test number <?PHP echo($b);
$b = $a?> that expanded across multiple lines.
您可以使用
<\?php(?!\S)((?:(?!<\?php(?!\S)|\?>).)*\R[\s\S]*?)\?>
多行变体 .
:
<\?php\s((?:(?!<\?php\s|\?>).)*\R(?s:.*?))\?>
见regex demo。 详情:
<\?php
- <?php
子串
(?!\S)
- right-hand 空白边界(紧靠右边,必须有空白或字符串开头)
((?:(?!<\?php(?!\S)|\?>).)*\R[\s\S]*?)
- 第 1 组:
(?:(?!<\?php(?!\S)|\?>).)*
- 除换行符字符外的任何单个字符,零个或多个字符,出现次数尽可能多,不会开始 <?php + a right-hand whitespace boundary or
?>` 字符序列
\R
- 换行序列
[\s\S]*?
/ (?s:.*?)
- 尽可能少的任何零个或多个字符
\?>
- ?>
子串。
我想更改 /<\?php\s([\s\S]*?)\?>/gi
排除单行 PHP 标签的方式。
例如,这里我只想匹配第二个 PHP 标签而不是第一个:
Test number <?PHP echo($a);?> is here.
This is test number <?PHP echo($b);
$b = $a?> that expanded across multiple lines.
您可以使用
<\?php(?!\S)((?:(?!<\?php(?!\S)|\?>).)*\R[\s\S]*?)\?>
多行变体 .
:
<\?php\s((?:(?!<\?php\s|\?>).)*\R(?s:.*?))\?>
见regex demo。 详情:
<\?php
-<?php
子串(?!\S)
- right-hand 空白边界(紧靠右边,必须有空白或字符串开头)((?:(?!<\?php(?!\S)|\?>).)*\R[\s\S]*?)
- 第 1 组:(?:(?!<\?php(?!\S)|\?>).)*
- 除换行符字符外的任何单个字符,零个或多个字符,出现次数尽可能多,不会开始<?php + a right-hand whitespace boundary or
?>` 字符序列\R
- 换行序列[\s\S]*?
/(?s:.*?)
- 尽可能少的任何零个或多个字符
\?>
-?>
子串。