Sadece parantez kümesiyle parantez içinde metinleri nasıl çıkarabileceğimi merak ediyorum.Parantezler Arasında Metin Kaldırma PHP
Örnek:
ABC (Test1)
Ben (Test1) silmek ve sadece bırakmak istiyorum ABC
Teşekkür
Sadece parantez kümesiyle parantez içinde metinleri nasıl çıkarabileceğimi merak ediyorum.Parantezler Arasında Metin Kaldırma PHP
Örnek:
ABC (Test1)
Ben (Test1) silmek ve sadece bırakmak istiyorum ABC
Teşekkür
$string = "ABC (Test1)";
echo preg_replace("/\([^)]+\)/","",$string); // 'ABC '
preg_replace
bir perl tabanlı düzenli ifade rutini değiştirir. Bu kodun yapmasıdır karakterler değil bir kapatma parantezi herhangi bir sayıda takip ve tekrar kapanan parantez ardından bir açılış parantez tüm oluşumları ile eşleşir ve sonra bunları siler:
Düzenli ifade dökümü:
regex olmadan/ - opening delimiter (necessary for regular expressions, can be any character that doesn't appear in the regular expression
\(- Match an opening parenthesis
[^)]+ - Match 1 or more character that is not a closing parenthesis
\) - Match a closing parenthesis
/- Closing delimiter
$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);
Hızlı ve kirli. Bunu sevdim. –
Millet, düzenli ifadeler olmayan düzenli dilleri ayrıştırmak için kullanılan EDİLEMEZ. Normal olmayan diller, yorumlanması gereken durumlardır (yani şu anda kaç tane parantezin açık olduğunu hatırlamak).
Yukarıdaki tüm yanıtlar bu dizede başarısız olacaktır: "ABC (merhaba (dünya) nasılsınız".
Oku Jeff Atwood Ayrıştırma Html Cthulhu Yolu: http://www.codinghorror.com/blog/archives/001311.html ve sonra ya bir tarafından el yazılı ayrıştırıcı kullanmak (dizede karakterler aracılığıyla döngü, karakter bir parantez olup olmadığını bir yığın korumak bakınız) veya kullanım Bağlamsız bir dili ayrıştırabilen bir lexer/parser. "Düzgün eşleşti parantez dilinde:" http://en.wikipedia.org/wiki/Dyck_language
PHP'nin normal ifadeleri normal dillerle sınırlı değildir. '\ (([^()] * + | (? R)) * \)' keyfi olarak yuvalanmış parantezleri eşleştirir. –
İyi belirtme çizgisi. Konuyla ilgili kapsamlı bilgi: http://php.net/manual/en/regexp.reference.recursive.php –
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
$paren_num = 0;
$new_string = '';
foreach($string as $char) {
if ($char == '(') $paren_num++;
else if ($char == ')') $paren_num--;
else if ($paren_num == 0) $new_string .= $char;
}
$new_string = trim($new_string);
Bu parantez sayma, her karakterin bir döngü ile çalışır
Ayrıca bu wikipedia makalesine bakın. Yalnızca $paren_num == 0
(tüm parantezlerin dışında olduğunda), karakterleri sonuçtaki dizgimize, $new_string
'a ekler.
Harika, teşekkür ederim ^^ – whitesiroi
Kabul edilen yanıt, yuvalanmamış parantezler için harika çalışıyor. Normal ifadede küçük bir değişiklik, iç içe parantez üzerinde çalışmasına izin verir. (Preg olmadan)
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);
En Quik yöntemi:
$str='ABC (TEST)';
echo trim(substr($str,0,strpos($str,'(')));
Eğer kelimenin sonundaki boşluk Döşeme sadece koddan Trim fonksiyonunu kaldırmak istemiyorsanız
.$str ="ABC (Test1)";
echo preg_replace('~\(.*\)~' , "", $str);
wow: O Hızlı cevap! Teşekkürler! Biraz açıklamak ister misiniz? Yaptığın şeyi gerçekten anlamadım. –
Karakter sınıfınızda) denemelisiniz. – mopoke
Normal bir ifade. Bunu açıklamak çok zor. – metrobalderas