我怎样才能在某些标签之间获取一个字符串,但在“</table>”之前,带有正则表达式


How can I get a string between some tags, but BEFORE "</table>", with a regex?

/<table['s]+cellspacing="0"['s]+class="cj(?:.*?)"['s]+id="(?:.*?)">(?:.*?)value="(.*?)"(?:.*?)<td['s]+class="dep">(.*?)<'/td>(?:.*)(?:<td['s]+class="arr">(.*?)<'/td>)+(?:.*?)<'/table>/

这是我当前的正则表达式字符串,在 PHP 中使用 preg_match_all() .我用(?:.*)替换了(?:.*?),这样它就不会得到第一个<td> class="dep",而是得到最后一个。现在,这非常有效,除非有多个表,在这种情况下,它会从整个解析的字符串中获取最后一个<td> class="dep"。谁能帮助我了解我做错了什么?

另外,我知道我应该使用XML解析,但这对我来说似乎太复杂了:P

编辑:另外,我真正想要的是第一个</table>标签之前的<td>

这个简单的模式

$pattern = "#<table's.*?>.*?<td's.*?class=['"']dep['"'].*?>(.*?)</td>.*?</table>#i";

从主题字符串中的每个表中返回第一个匹配的对<td...class="dep"...></td>标记中的数据(无论您有多少个表(。

这是不区分大小写的搜索,它也会匹配类名(class="dep"class='dep'(周围的单引号和双引号。

注意:如果您在单个表中有更多带有class="dep" <TD>标签,则此模式将返回该类TD对首次出现的数据。

示例代码将是这样的

$pattern = "#<table's.*?>.*?<td's.*?class=['"']dep['"'].*?>(.*?)</td>.*?</table>#i";
$document = ''; // put here your subject string
preg_match_all($pattern, $document, $results);
print_r($results[1]);

干杯!

最终通过获取一个正则表达式的表,然后用另一个正则表达式解析其内容来修复它。

相关文章: