php 在preg_match_all()模式中使用散列符号提取数据不起作用

7ivaypg9  于 2023-01-24  发布在  PHP
关注(0)|答案(1)|浏览(319)

我是RegEx的新手。我正在解析一个HTML页面,因为它有很多错误,所以我不能使用XML或HTML解析器。所以我使用了正则表达式。我的代码如下所示:

$html = '<html><div data-id="ABC012" data-index="123" ...';
preg_match_all('/<div data-id="[A-Z\\d]+" data-index="\\d+"/', $html, $result);
var_dump($result);

输出看起来很好,所以代码可以正常工作。现在我想提取匹配的值。我完全按照this答案中的描述进行了提取,现在代码如下所示:

$html = '<html><div data-id="ABC012" data-index="123" ...';
preg_match_all('/<div data-id="#([A-Z\\d]+)" data-index="#(\\d+)"/', $html, $result);
var_dump($result);

但是它输出了一个空数组。出了什么问题?请不要通过添加结束符“〉”或者使它对白色更健壮来改进模式。我只需要让代码运行起来。

fcg9iug3

fcg9iug31#

可以这样编写代码和模式,使用一个反斜杠匹配数字\d,并在模式中省略#,因为示例数据中没有#

$html = '<html><div data-id="ABC012" data-index="123" ...';
preg_match_all('/<div data-id="([A-Z\d]+)" data-index="(\d+)"/', $html, $result);
var_dump($result);

产出

array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(38) "<div data-id="ABC012" data-index="123""
  }
  [1]=>
  array(1) {
    [0]=>
    string(6) "ABC012"
  }
  [2]=>
  array(1) {
    [0]=>
    string(3) "123"
  }
}

相关问题