preg_replace veya str_replace

3 Cevap php

Ben, böyle bir şey bazı metin var:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text

Ne istiyorum Unknown Text tutmak için, ama (SOME KNOWN TEXT) ve (SOME OTHER KNOWN TEXT) kurtulmak.

Ben preg_replace istediğimi bana verecektir düşünüyorum, ama ben bu değiştirmek için normal ifade gerekir:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)

Bu ile ..

Unknown Text

Anlıyorum preg_replace replacement text, 3 parametreleri, regex alır ve subject.

Yerine text parametresi bilinmeyen metin değerini geçmek için bir yol, YA, Bilinmeyen Metin çıkarmadan sağ ve sol parçaları (SOME KNOWN TEXT) ve (SOME OTHER KNOW TEXT) reaplce için bir yolu var mı? Alternatif olarak, bu bir str_replace() çözüm var mı?

Teşekkürler

---UPDATE---

(DİĞER BAZI BİLİNEN METİN) adet metinde başka yerlerde var olabilir, ama (SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT) desen izler sürece kaldırıldı istemiyorum. Ben ilk str_replace önerileri çünkü bu iş olmaz düşünüyorum.

3 Cevap

Koşulları nelerdir? Eğer varsa:

(DİĞER BAZI BİLİNEN METİN) Bilinmeyen Metin (BAZI BİLİNEN METİN)

(Parantez içi metin takas yani eğer), yine de kaldırmak istiyor musunuz? Bilinen metin her zaman satırın başında veya sonunda olmalı? Cevap bu ya evet ise, muhtemelen bir regex kullanarak daha iyidir. Böyle bir şey:

$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);

Ters eğik çizgi (\) ( ve düzenli ifadelerde özel bir anlamı var ) karakterleri, kaçmak için vardır. Ben içeriğini değiştirmek isteyeceksiniz varsayalım - o noktada onları kaldırabilirsiniz.

Bu düzenli ifade olarak, . is a special operator meaning "any character." It will match any character. The + means "one or more", and is a modifier on the previous operator - together, these can be interpreted as matching "one or more of any character". The ( ve ) karakter a {[(4) 'de metnin bölümleri yakalamak için kullanılırlar }]. Parantez içindeki .+ kapsayan ile, bu değiştirme kullanılacak yakalar. ( ve ) regex motoru tarafından $1 etiketli çevrili ilk bölümü. Biz daha fazla olsaydı, bu kadar üzerine $3, $2 etiketli ve olurdum.

Bunların hiçbiri geçerli değilse diğer yanıtlar belirttiğimiz gibi, str_replace işlevini kullanabilirsiniz.

İki metin gerçekten biliniyorsa, bunu yapabilirsiniz:

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');

hangi bir düzenli ifadenin daha iyi performans. İlk argüman yerine anahtarları seti, ikinci argüman ile değiştirmek için ne olduğunu ve üçüncü konudur.

Sadece sizin gibi kaldırmak istediğiniz dizeleri bir dizi ile str_replace sağlayabilir:

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);

Herhangi bir akıllı desen eşleştirmeye ihtiyaç yoksa, bu regex daha hızlı bir çözüm olacaktır.