如果我想从
中提取ABC<td>ABC</td>
和
<td id="id">ABC</td>
使用相同的正则表达式,我怎么能做到这一点?
<td['s'S]*?>['s'S]*?<'/td>
这符合情况,但我想在开始和结束时排除匹配的td标记。
方法1:捕获组
<td['s'S]*?>(['s'S]*?)<'/td>
将您感兴趣的正则表达式部分括在括号中,然后引用此捕获组(根据正则表达式的风格使用$1
或'1
作为反向引用)。EDIT: Use '1
for PCRE
方法2:向后看/向前看
编辑:修改下面使用'K
代替可变长度向后看-功劳归于Jonny 5在评论中的好点
<td'b[^>]*>'K.*?(?=</td>)
然后搜索标签,但不包含在匹配中。
你不应该使用正则表达式从一个有效的HTML文件/片段中解析数据。您可以使用DOMDocument
和DOMXPath
:
td
标签内容。$html = "<<YOUR_HTML_STRING>>";
$arr = array();
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$tds = $xpath->query('//td');
foreach($tds as $td) {
array_push($arr, $td->nodeValue);
}
print_r($arr);
参见IDEONE demo