0

次のような HTML ファイルのコンテンツを返します。

<irrelevant things> 
   <tr id="myid"> 
      <td>Content</td> 
   </tr> 
<irrelevant things again>

また :

<irrelevant things> 
   <tr id="myid"> 
      <td><a href="somewhere.com">Content</a></td> 
   </tr> 
<irrelevant things again>

正規表現を 1 つだけ使用して、両方のケースで「コンテンツ」のみを取得することは可能ですか?

私はこれを試しましたが、結果はありません:

preg_match('/<tr id="myid"><td>(<a href="[^\"]*">)?([^<]*)/', $html, $mycontent);

ありがとう

4

2 に答える 2

4

正規表現はこれに最適な方法ではありません。id ("myid")があるため、 で簡単に実行できますDOMDocument。例:

$doc = new DOMDocument();
@$doc->loadHTML($yourstring);

$node = $doc->getElementById('myid');

echo trim($node->textContent);
于 2013-11-11T21:14:22.333 に答える
1

正規表現でそれを行う方法は次のとおりです。

<td>(?:<a.*?>)?([^<]+)

デモ

ただし、 PHP Simple HTML DOM Parserのような DOM パーサーを使用する方が簡単です。

于 2013-11-11T21:16:20.977 に答える