0

属性 data-class="false" を含むリンクから class="something" を削除し、他のリンクをそのままにしておくように PHP コードを取得しようとしています。

$mytext = 'text text text <a href="/url" data-class="false" class="something">
link1</a> text text text <a href="/url" class="something">link2</a> text text 
text <a href="/url" class="something" data-class="false">link3</a> text text 
text';

// This function is supposed to remove the class="something" string from matches.
function remove_class($matches) {
  return str_replace(' class="something"','', $matches[1]);
}

// Match any link that contains the data-class="false" string and do callback.
$mytext = preg_replace_callback('/<a.*?data-class="false".*?>/', 
'remove_class', $mytext);

echo $mytext;

以下の望ましい結果: ( data-class="false" が存在する場所でクラスが削除されていることに注意してください)

text text text <a href="/url" data-class="false">link1</a> text text text
<a href="/url" class="something">link2</a> text text text
<a href="/url" data-class="false">link3</a> text text text
4

2 に答える 2

0

preg_replace_callbackあなたが示しているコードから、使用する理由がわかりませんpreg_replace。十分なはずです。

$mytext = 'text text text <a href="/url" data-class="false" class="something">
link1</a> text text text <a href="/url" class="something">link2</a> text text 
text <a href="/url" class="something" data-class="false">link3</a> text text 
text';

// Match any link that contains the data-class="false" and class="something" 
// Then removes class="something".
$mytext = preg_replace('/(<a.*?)(class="something")\s(.*?data-class="false".*?>)|(<a.*?)(data-class="false".*?)\s(class="something")(.*?>)/', 
'$1$3$4$5$7', $mytext);

echo $mytext;

出力します:

text text text <a href="/url" data-class="false">
link1</a> text text text <a href="/url" class="something">link2</a> text text 
text <a href="/url" data-class="false">link3</a> text text 
text

何が起こっているかというと、それはORにpreg_replace一致します。各サブパターン (...) は、サブパターンの $ と番号で参照できます。最初の 3 つのサブパターンが見つかった場合は、$1$3 を使用して $2 を除外し、一致を必要なサブパターンの一致のみに置き換えます。サブパターン $4-$7 は使用されていないため無視され、$4-$7 に一致する場合はその逆になります。サブパターンを除外することで、余分なスペースを取り除くことができます。class="something" data-class="false"data-class="false" class="something"\s

于 2013-11-09T07:28:58.600 に答える