<tr><td><span id="test"><a href="index.htm">top</a> <a href="test.htm">test</a> </span>japan</td></tr>
<tr><td>フランス</td></tr>
<tr><td><span id="test"><a href="index.htm">top</a> <a href="test.htm">test</a> </span>=,+){(<>&</td></tr>
・期待すべき結果
japan
フランス
=,+){(<>&
<td>か</span>で囲まれているところがキーだと思い下記のようにしましたがうまくいきません。
preg_match_all("/(<td>|<\/span>)(.+?)<\/td><\/tr>+/", $VAL, $TEXT);
解決策ご提示の方には高ポイント差し上げます。
$html = '<tr><td><span id="test"><a href="index.htm">top</a> <a href="test.htm">test</a> </span>japan</td></tr> <tr><td>フランス</td></tr> <tr><td><span id="test"><a href="index.htm">top</a> <a href="test.htm">test</a> </span>=,+){(<>&</td></tr> '; preg_match_all('{<tr>.*>(.+?)</td></tr>}', $html, $matches) ; print_r($matches[1]) ;
こんな感じでどうでしょうか。
>正規表現で文字だけ抜き出す方法
配列として(タグ以外の)文字を抜き出すのなら、提示された文章を$VALとして、
preg_match_all('/>(.+?)</', $VAL, $matches);
またはタグの除去ならばstrip_tags()というのも便利です。
期待すべき結果のところで、top、test、&nbsp;がないのは<a>タグかあるとか、スペースだからでしょうか?
もしくはおっしゃるように<td>~</td>または</span>~</td>のパターンだけとりたいのでしょうか?この場合は
preg_match_all('@(<td>|</span>)([^<>]+?)</td>@', $VAL, $matches);
でよいと思います。
このあたりのルールを明示して頂くとより回答しやすくなると思います。
<>(半角)が入ると表示が変になってしまうので、全角で書いてあります。
$subject = '文字列';
$pattern='/>([^<>]+)</';
;$matches=array();
preg_match_all($pattern,$subject,$matches);
print_r($matches[1]);
nbspもいらないのでしたらさらに、
$matches_ = array();
foreach($matches[1] as $value ) {
if ($value != 'nbsp') $matches_[] .= $value ;
}
print_r($matches_);
コメント(0件)