这是我的代码:
<?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>
。为什么呢?
答案 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>
我觉得它有效