0

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

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

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

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

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

4

3 回答 3

4

上面的代码不起作用

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

这应该做你想要的:

/<td class=\'postac\'>([A-Z][^<]*)<\/td>/s
于 2013-01-08T22:32:43.617 回答
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;
}

请参阅实际代码

于 2013-01-08T22:33:21.723 回答
0

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

于 2013-01-08T22:36:26.717 回答