正则表达式无法正常工作

时间:2011-08-09 23:46:12

标签: php regex

这是我的代码:

<?php
$text='<td valign="top">text</td><td>more text</td>';
preg_match('/<td valign="?top"?>.*<\/td>)/s', $text, $matches);

?>

$matches[0]应返回<td valign="top">text</td>,但会返回<td valign="top">text</td><td>more text</td>。为什么呢?

3 个答案:

答案 0 :(得分:4)

通过添加.*

使?模式不贪婪
preg_match('/<td valign="?top"?>.*?<\/td>)/s', $text, $matches);
                                ^^^ 

以下是贪婪与非贪婪正则表达式的示例:http://www.exampledepot.com/egs/java.util.regex/Greedy.html

  

为什么?

这就是正则表达式的工作原理。您可能正在寻找XML解析器:

$text='<td valign="top">text</td><td>more text</td>';

$xml = simplexml_load_string("<x>$text</x>");
list($td) = $xml->xpath('td[@valign="top"]');
echo $td->asXML(); # <td valign="top">text</td>

答案 1 :(得分:0)

?不能孤单。它是一个修饰符和贪婪的运算符。这意味着寻找最接近的匹配。也许你需要一个。+?在你的表达。

答案 2 :(得分:0)

试试这个<td valign.+?\/td>我觉得它有效