Php 尝试将html中的脚本标记与正则表达式匹配
我有以下html片段和正则表达式,试图匹配所有没有“data capture=“0”属性的脚本标记。Php 尝试将html中的脚本标记与正则表达式匹配,php,regex,Php,Regex,我有以下html片段和正则表达式,试图匹配所有没有“data capture=“0”属性的脚本标记。 $html='1!' var foo=“正确匹配”; var bar=“再次正确匹配”; var baz=“未正确匹配”; '; preg_match_all('/((|).*)/s',$html,$matches); 但是,第一个脚本不匹配(应该匹配),第二个脚本不匹配(不应该匹配),我无法解释原因。有人能提个建议吗 我知道在解析HTML时正则表达式是不可靠的。让我们将其视为常规正则表
$html='1!'
var foo=“正确匹配”;
var bar=“再次正确匹配”;
var baz=“未正确匹配”;
';
preg_match_all('/((|).*)/s',$html,$matches);
但是,第一个脚本不匹配(应该匹配),第二个脚本不匹配(不应该匹配),我无法解释原因。有人能提个建议吗
我知道在解析HTML时正则表达式是不可靠的。让我们将其视为常规正则表达式,而不是试图创建HTML解析器。为什么不这样做:
preg_match_all(
'/((<script(?! data-capture="0").*?>|<script>).*?<\/script>)/s',
$html,
$matches
);
preg\u match\u all(
“/(|).*)/s”,
$html,
$matches
);
第一个没有type属性,当您在正则表达式中搜索它时,必须“您不能用正则表达式解析HTML”:感谢您的提示,我知道用正则表达式解析HTML是不好的。让我们假设这只是一个特例,我知道后果。我用更多的测试修改了我的原始问题,你的建议与第二个脚本匹配,但不应该
preg_match_all(
'/((<script(?! data-capture="0").*?>|<script>).*?<\/script>)/s',
$html,
$matches
);