我正在尝试匹配存在时的可选链接/标题,如果没有链接只是匹配标记内的文本。
表示例:
$html_data = <<<HTML
<table>
<tr> <td> Some text here </td> </tr>
<tr> <td> Some text with link <a href="http://domain1.com/">Link Title 1</a> </td> </tr>
<tr> <td> Some text here without link </td> </tr>
<tr> <td> Some text with link <a href="http://domain2.com/">Link Title 2</a> and more text </td> </tr>
</table>
HTML;
代码示例:
preg_match_all('~<tr> <td> (?:<a href="(.*?)">(.*?)</a>)? (.*?) </td> </tr>~i', $html_data, $result);
所以我需要抓取纯文本和链接+标题(如果存在)并将其放入数组中。
这样的东西,当链接存在时;
'text_before' => 'Some text with link'
'link_href' => 'http://domain2.com/'
'link_title => 'Link Title 2'
'text_after' => 'and more text'
如果没有链接,只需匹配“td”标记之间的可用文字。
这样的东西,当没有链接时;
'text' => 'Some text here without link'
答案 0 :(得分:2)
我会从一开始就采取一些措施:
<td.*?<\/td>
因为您需要包含要评估的代码的行,然后:<a.*?>(.*?)<\/a>
因为您需要链接的标题,然后:href=\"(.*?)\"
因为您需要一个链接,然后:<td>(.*?)<
因为您需要一个文本,即使内部没有链接,并且:<\/a>(.*?)<
最后。希望它有所帮助。 欢呼声。
编辑:
一个正则表达式<td.*?>(.*?)(<a.*?href=\"(.*?)\".*?>(.*?)</a>)?(.*?)</td>