下記からphpの正規表現で文字だけ抜き出す方法を教えて下さい。文字列は<>?などエスケープされるもの以外は何でも入ります。


<tr><td><span id="test"><a href="index.htm">top</a>&nbsp;<a href="test.htm">test</a>&nbsp;</span>japan</td></tr>
<tr><td>フランス</td></tr>
<tr><td><span id="test"><a href="index.htm">top</a>&nbsp;<a href="test.htm">test</a>&nbsp;</span>=,+){(&lt;&gt;&amp;</td></tr>

・期待すべき結果
japan
フランス
=,+){(&lt;&gt;&amp;


<td>か</span>で囲まれているところがキーだと思い下記のようにしましたがうまくいきません。
preg_match_all("/(<td>|<\/span>)(.+?)<\/td><\/tr>+/", $VAL, $TEXT);

解決策ご提示の方には高ポイント差し上げます。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/05/21 01:15:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:GEN111 No.1

回答回数472ベストアンサー獲得回数58

ポイント27pt
$html = '<tr><td><span id="test"><a href="index.htm">top</a>&nbsp;<a href="test.htm">test</a>&nbsp;</span>japan</td></tr>
<tr><td>フランス</td></tr>
<tr><td><span id="test"><a href="index.htm">top</a>&nbsp;<a href="test.htm">test</a>&nbsp;</span>=,+){(&lt;&gt;&amp;</td></tr>
';

preg_match_all('{<tr>.*>(.+?)</td></tr>}', $html, $matches) ;
print_r($matches[1]) ;

こんな感じでどうでしょうか。

id:gekikawa No.2

回答回数110ベストアンサー獲得回数11

ポイント27pt

>正規表現で文字だけ抜き出す方法

配列として(タグ以外の)文字を抜き出すのなら、提示された文章を$VALとして、

preg_match_all('/>(.+?)</', $VAL, $matches);

またはタグの除去ならばstrip_tags()というのも便利です。


期待すべき結果のところで、top、test、&nbsp;がないのは<a>タグかあるとか、スペースだからでしょうか?

もしくはおっしゃるように<td>~</td>または</span>~</td>のパターンだけとりたいのでしょうか?この場合は

preg_match_all('@(<td>|</span>)([^<>]+?)</td>@', $VAL, $matches);

でよいと思います。

このあたりのルールを明示して頂くとより回答しやすくなると思います。

<>(半角)が入ると表示が変になってしまうので、全角で書いてあります。

id:Yota No.3

回答回数453ベストアンサー獲得回数28

ポイント26pt

$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_);

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません