正则表达式找到以大写字母开头但没有“<”的字符串标志

时间:2013-01-08 22:30:25

标签: php regex html-parsing

我正在尝试解析以下代码:

<td class='postac'>Actelsar </td>
<td class='postac'>tabl. 80 mg 28 tabl.</td>

输入应该是“<td class='postac'> </td>”标签之间的文本(不带“&lt;”符号),以大写字母开头。

正则表达式:/<td class=\'postac\'>^[A-Z]+([^<]*)$<\/td>/s

上面的代码不起作用。谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

  

上面的代码不起作用

它不是因为出于某种原因你在正则表达式的中间放置了$^符号(这意味着字符串/行的结束和开头相应)

这应该做你想要的:

/<td class=\'postac\'>([A-Z][^<]*)<\/td>/s

答案 1 :(得分:2)

使用HTML解析器解析HTML而非正则表达式。它可以通过DOMDocument和DOMXPath轻松完成。

$doc = new DOMDocument();
$doc->loadHTML($str);
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//td[@class="postac"]');
$result = array();
for($i=0;$i<$nodes->length; $i++){
    $text = $nodes->item($i)->textContent;
    if(isset($text[0])&&ctype_upper($text[0])) $result[]= $text;
}

请参阅code in action

答案 2 :(得分:0)

/<td class=\'postac\'>([A-Z]+.*)<\/td>/将与Actelsar匹配,但不会与Tabl匹配。 80毫克表。