人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記から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);

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

●質問者: dosukoi1988
●カテゴリ:インターネット ウェブ制作
✍キーワード:AMP GT JAPAN LT PHP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● GEN111
●27ポイント
$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]) ;

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


2 ● gekikawa
●27ポイント

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

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

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

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


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

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

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

でよいと思います。

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

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


3 ● Yota
●26ポイント

$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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ