Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试将html中的脚本标记与正则表达式匹配_Php_Regex - Fatal编程技术网

Php 尝试将html中的脚本标记与正则表达式匹配

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片段和正则表达式,试图匹配所有没有“data capture=“0”属性的脚本标记。

$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
);