如何使用preg_match匹配它

时间:2013-07-03 09:58:37

标签: php regex

我正在尝试使用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或其​​他方法....只有正则表达式。

4 个答案:

答案 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)

如果你要穿越阿尔卑斯山,你会使用哪一种呢?

Kitchen knife Range Rover

正则表达式几乎总是用于修改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);

http://writecodeonline.com/php/

上进行测试