获取字符串之间的字符串,但不包括正则表达式中匹配的字符串


Get string between string without including the matched string in Regex

如果我想从

中提取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文件/片段中解析数据。您可以使用DOMDocumentDOMXPath:

获取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