我正在尝试使用preg_match获取包含html标签的第一个表,但它不起作用 这是我正在尝试的事情
$con='<table class="first">
<tr><td>31231</td></tr>
<tr><td>25235</td></tr>
</table>
<table class="second">
<tr><td>333</td></tr>
<tr><td>333</td></tr>
</table>';
preg_match('/<table class="first">[^~]+<\/table>/i',$con,$match);//It's also includes second table
preg_match('/<table class="first">[^~]+?<\/table>/i',$con,$match);//Not matching anything..
请帮忙...... PS:我不想使用DOM或其他方法....只有正则表达式。
答案 0 :(得分:2)
为什么第一个表达式与第二个表匹配,默认情况下preg_match
是“贪婪”。这意味着,如果您查找<table>(.*)</table>
,它将在<table>
的第一场比赛到</table>
的最后一场比赛之间获得所有内容。您可以通过添加 U 修饰符来使其“不合适”。
preg_match('/<table class="first">[^~]+<\/table>/iU',$con,$match);
使用“ungreedy”修饰符时,它会在</table>
您可以使用多个pattern modifiers。
答案 1 :(得分:1)
试试这个
preg_match('/<table class="first">.+?<\/table>/is',$con,$match);
答案 2 :(得分:1)
如果你要穿越阿尔卑斯山,你会使用哪一种呢?
正则表达式几乎总是用于修改HTML的错误工具。这是个坏主意。您想知道如何使用正则表达式修改HTML吗?答案是: 不 。就像在,忘记它。别管它。去度假。你是个聪明人:做别的事。
在这种情况下,您应该使用DOM方法,这是由内置的PHP库提供的,用于执行此任务。
$dom = new DOMDocument;
$dom->loadHTML($yourHTML);
$xpath = new DOMXPath($dom);
$table = $xpath->query('//table[@class="first"]');
答案 3 :(得分:0)
第二个正在运作,
$con='<table class="first">
<tr><td>31231</td></tr>
<tr><td>25235</td></tr>
</table>
<table class="second">
<tr><td>333</td></tr>
<tr><td>333</td></tr>
</table>';
preg_match('/<table class="first">[^~]+?<\/table>/i',$con,$match2);
print_r($match2);
上进行测试