-1

HTML コンテンツがあり、タグを置き換えたい:

<span class='c1'>MY TEXT</span>

そしてMY TEXTを保管してください。私は試しました:

$result = preg_replace('/(<span class=\'c1\'>)(.*)(<\/span>)/', '$2', $my_string);

でもクローズドタグはまだ残ってる?私を助けて、私の間違いがどこにあるかを説明してもらえますか? 自分を磨きたい!ありがとうございました

4

5 に答える 5

2

(.*?)貪欲な試合の代わりに怠惰な試合を使用してみてください(.*)

欲張り一致とは、終了する前に可能な限り一致することを意味します。したがって、</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----^
于 2012-07-23T07:55:02.737 に答える
0

それを試してみてください

$result = preg_replace('/(\<span class=(\'|\")?c1(\'|\")?\>)(.*)(\<\/span\>)/i', '$4', $my_string);
于 2012-07-23T07:54:26.990 に答える
0

マッチオール グループの消費量が多すぎる可能性があり</span>、後続のコンテンツから別のグループが表示されます。試してみてください

$result = preg_replace('/(<span class=\'c1\'>)(.*?)(<\/span>)/', '$2', $my_string);

これは貪欲でない全一致 ( .*?) を使用します。

于 2012-07-23T07:54:46.007 に答える
0

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'

それはそれと同じくらい簡単です。

于 2012-07-23T08:13:40.550 に答える
0

これにより、完璧な結果が得られます。

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];
}
于 2012-07-23T08:15:18.533 に答える