Böyle bir şey, ama ben bunu 2 kez yapmak istemiyorum:
preg_match_all($pattern,$string,$matches);
$string = preg_replace($pattern,'',$string);
Tamam
böylece eşleşmelerini yakalamak, ve bir işlev çağrısı, değiştirmek istiyor. Aksi takdirde ben kodunuzu daha az okunabilir yapmak istiyorum için iyi bir neden görebilirsiniz, iki kez pahalı bir regex işlemek istemiyorum tahmin ediyorum.
Her neyse,
Eğer preg_replace_callback()
a> kullanarak deneyebilirsiniz. Gibi bir şey:
class MatchReplace {
var $matches;
var $pattern;
var $replacement;
var $string;
var $matchCount;
function __construct($pattern, $replacement) {
$this->replacement = $replacement;
$this->pattern = $pattern;
}
function matchAndReplace($string) {
$this->string = $string;
var_dump($string);
var_dump($this->pattern);
return preg_replace_callback($this->pattern,
array($this, '_worker'), $string, -1, $this->matchCount);
}
function _worker($matches) {
echo "Matches:\n";
var_dump($matches);
}
}
Örnek çalıştırın:
echo "<pre>\n";
$m = new MatchReplace('|(abc)|', '');
echo "\nResult: \n".$m->matchAndReplace('XXXabcYYY');
echo "\n</pre>";
Çıktı:
string(9) "XXXabcYYY"
string(7) "|(abc)|"
Matches:
array(2) {
[0]=>
string(3) "abc"
[1]=>
string(3) "abc"
}
Result:
XXXYYY
Bunun görünüyor tarafından size 2 tamamen ayrı şeyler yapıyorsun.
preg_match_all($pattern,$string,$matches); // return all the matches
$string = preg_replace($pattern,'',$string); // replace all the matches in the string
Yani aslında iki şey yapmıyorlar. Eğer satır aşağı bir yerde daha fazla $ eşleşmeleri kullanmadığınız sürece zaten preg_replace afterwords yapmak için gidiyoruz eğer, ilk satırı ilgisizdir.
(Düzenli ifadeler gibi) fantezi değiştirilmesi kuralları gerekmez, her zaman str_replace () fonksiyonu yerine ereg_replace () veya preg_replace () kullanmalısınız.
http://uk.php.net/str%5Freplace
Bu, tüm oluşumları ve sadece 1 komut yapacağız.
Eğer böyle bir şey mi?
$string = preg_replace(preg_match_all($pattern,$string,$matches),'',$string);
Update:
Ben bu yüzden böyle bir şey istiyorum .. ama şimdi görebiliyordu düşündüm ki onun mümkün değil (@ gnud cevap olarak) şeyler komplike olmadan. Yani cevabı tek satırda bunu yapamaz, yok olduğunu.