我正在尝试解析以下代码:
<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
上面的代码不起作用。谢谢你的帮助。
答案 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毫克表。