Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Html Parsing_Preg Match - Fatal编程技术网

Php 检查html是否包含带有属性的标记

Php 检查html是否包含带有属性的标记,php,regex,html-parsing,preg-match,Php,Regex,Html Parsing,Preg Match,我正在使用regex解析一个HTML页面,因为它的内容不是有效的HTML(opentags等) 我想检查HTML是否包含属性为data valmsg for=“LoginError”的。 我已经使用DOM尝试过了,但是由于HTML无效,它似乎无法找到标记 我最近尝试的是preg_match(“//I”,$sHtml) 我的正则表达式技能几乎不存在,所以我想知道正确的正则表达式应该是什么 更新: 下面是一个html的示例 [...] <span class="field-validatio

我正在使用regex解析一个HTML页面,因为它的内容不是有效的HTML(opentags等)

我想检查HTML是否包含属性为
data valmsg for=“LoginError”
。 我已经使用DOM尝试过了,但是由于HTML无效,它似乎无法找到标记

我最近尝试的是
preg_match(“//I”,$sHtml)
我的正则表达式技能几乎不存在,所以我想知道正确的正则表达式应该是什么


更新: 下面是一个html的示例

[...]
<span class="field-validation-error" data-valmsg-for="LoginError" data-valmsg-replace="true" id="CodeError">Du har gjort m&#229;nga f&#246;rs&#246;k inom en kort tid. F&#246;rs&#246;k igen senare</span>        <br>
[...]
[…]
杜哈尔科特m&229;nga f&246;246卢比;金门恩科特tid。Fö;246卢比;k伊根塞纳雷
[...]
如果需要检查,请使用此regexp:

$a = "<span></span><span data-valmsg-for=\"LoginError\">test</span><br>";
if (preg_match_all('/<[a-z \'"]*data-valmsg-for/i', $a, $matches)) {
    var_dump($matches);
} else {
    echo 'fail';
}
$a=“测试
”;
如果(preg_match_all('/),则以下各项应起作用:

var_dump(preg_match_all('~<span\s.*?data-valmsg-for="~i', $html));

如果我理解您的正则表达式,则您正在使用
data valmsg for
搜索任何
span
。但是,我专门查找
data valmsg for=“LoginError”
因为可能还有其他的。但是,我非常想让span的内容来考虑它。我尝试了你的正则表达式,但似乎也不能让它工作。谢谢。我会看看它。DOMDoc不工作,因为整个页面是ISS中的APS.net页面,与MS一样,不遵循html编码标准。验证它时会附带20-30个左右的warnings.pastebin之类的失败html示例
$a = "<span></span><span data-valmsg-for=\"LoginError\">test</span><br>";
if (preg_match_all('/<[a-z \'"]*data-valmsg-for=[\'"]LoginError[\'"][^>]*>([^<]*)/i', $a, $matches)) {
    var_dump($matches);
} else {
    echo 'fail';
}
var_dump(preg_match_all('~<span\s.*?data-valmsg-for="~i', $html));
$html = <<<HTML
[...]
<span>foo</span>
<span>bar
<span class="field-validation-error" data-valmsg-for="LoginError" data-valmsg-replace="true" id="CodeError">Du har gjort m&#229;nga f&#246;rs&#246;k inom en kort tid. F&#246;rs&#246;k igen senare        <br>
[...]
HTML;


$dom = new DOMDocument();
@$dom->loadHTML($html);
$spans = $dom->getElementsByTagName('span');

$i = 0;
foreach($spans as $span){
  echo ++$i . ' | ' . $span->getAttribute('data-valmsg-for') . '</br>';
}
1 | 
2 | 
3 | LoginError