在preg_match_all()正则中用#提取数据失败,求排查解决
正则表达式提取值失败问题解决
初始可正常匹配的代码:
$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);
修改后输出空数组的核心问题是:你在正则表达式里错误添加了不存在的#符号,原HTML字符串中data-id和data-index的属性值前并没有#,导致正则无法匹配到任何内容。
仅修正当前代码使其正常运行(不优化正则其他部分),只需移除正则里的两个#即可,正确代码如下:
$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);
运行后$result数组中:
- 索引0存储完整的匹配字符串
- 索引1存储所有提取到的
data-id值 - 索引2存储所有提取到的
data-index值
内容的提问来源于stack exchange,提问作者zomega
相关产品推荐
相关产品推荐

