HTML コンテンツがあり、タグを置き換えたい:
<span class='c1'>MY TEXT</span>
そしてMY TEXTを保管してください。私は試しました:
$result = preg_replace('/(<span class=\'c1\'>)(.*)(<\/span>)/', '$2', $my_string);
でもクローズドタグはまだ残ってる?私を助けて、私の間違いがどこにあるかを説明してもらえますか? 自分を磨きたい!ありがとうございました
HTML コンテンツがあり、タグを置き換えたい:
<span class='c1'>MY TEXT</span>
そしてMY TEXTを保管してください。私は試しました:
$result = preg_replace('/(<span class=\'c1\'>)(.*)(<\/span>)/', '$2', $my_string);
でもクローズドタグはまだ残ってる?私を助けて、私の間違いがどこにあるかを説明してもらえますか? 自分を磨きたい!ありがとうございました
(.*?)
貪欲な試合の代わりに怠惰な試合を使用してみてください(.*)
。
欲張り一致とは、終了する前に可能な限り一致することを意味します。したがって、</span>
どこかに別のものがある場合は、代わりにそれに一致します。例えば:
貪欲な試合の使用:
<span class='c1'>MY TEXT</span><span class='c1'>MY OTHER TEXT</span>
^--greedy match will go from here to here--^
レイジーマッチの使用:
<span class='c1'>MY TEXT</span><span class='c1'>MY OTHER TEXT</span>
^-lazy^ ^---lazy----^
それを試してみてください
$result = preg_replace('/(\<span class=(\'|\")?c1(\'|\")?\>)(.*)(\<\/span\>)/i', '$4', $my_string);
マッチオール グループの消費量が多すぎる可能性があり</span>
、後続のコンテンツから別のグループが表示されます。試してみてください
$result = preg_replace('/(<span class=\'c1\'>)(.*?)(<\/span>)/', '$2', $my_string);
これは貪欲でない全一致 ( .*?
) を使用します。
Simple HTML DOMを使用してください。これは、HTML 要素を操作するための最良のソリューションです。
例:
require_once('simple_html_dom.php');
$html = str_get_html('<span class="c1">MY TEXT</span>');
$text = $html->plaintext;
または、(HTML のスニペットではなく) HTML ドキュメント全体がある場合:
require_once('simple_html_dom.php');
$html = str_get_html('html goes here');
$text = $html->find('span.c1', 0)->plaintext; // Find text from first <span> with the class 'c1'
それはそれと同じくらい簡単です。
これにより、完璧な結果が得られます。
preg_match_all('/<span(.*?)class=\'c1\'>(.*?)<\/span>/', '$2', $my_string, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
echo $result[0][$i];
}