1

リンクがない場合は、タグ内のテキストと一致するだけです。

テーブルの例:

$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'
4

1 に答える 1

2

途中でいくつかの手順から始めます。

  1. <td.*?<\/td>評価するコードを含む行が必要な場合は、次のようになります。
  2. <a.*?>(.*?)<\/a>リンクのタイトルが必要な場合は、次のようにします。
  3. href=\"(.*?)\"リンクが必要な場合は、次のようにします。
  4. <td>(.*?)<内部にリンクがなくても、テキストが必要です。
  5. <\/a>(.*?)<最終的には。

それが役に立てば幸い。乾杯。

編集:1つの正規表現<td.*?>(.*?)(<a.*?href=\"(.*?)\".*?>(.*?)</a>)?(.*?)</td>

于 2013-11-11T10:47:23.723 に答える