Parantez PHP Arasında Metin kaldır

4 Cevap php

Ben sadece parantez bir dizi ve parantez kendilerini php arasındaki metni kaldırmak olabilir merak ediyorum.

Örnek:

ABC (Test1)

I (Test1) silmek için bunu ister ve sadece ABC bırakacaktı

Teşekkürler

4 Cevap

$string = "ABC (Test1)";
echo preg_replace("/\([^)]+\)/","",$string); // 'ABC '

preg_replace, bir Perl tabanlı düzenli ifade rutin değiştirin. Ne bu script yapar karakterleri not kapatma ayracı, ve yine bir kapatma parantezi izledi, ve sonra onları siler herhangi bir sayıyla bir parantez açma tüm tekrarlarını, maçlar olduğunu:

Düzenli ifade dökümü:

/  - 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

regex olmadan

$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
$paren_num = 0;
$chars = str_split($string);
$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 döngü ile çalışır. $ Paren_num == 0 (dışında tüm parantezler olduğunda) bizim edilen dizge, $ new_string için karakterleri append yapar sadece.

Dostlarım, düzenli ifadeler düzenli olmayan dilleri ayrıştırmak için kullanılan EDİLEMEZ. Düzenli olmayan diller (yani şu anda açık olan kaç parantez hatırlayarak) yorumlamak için devlet gerektiren olanlardır.

Yukarıdaki tüm cevapları bu dize başarısız olur: "(nasıl merhaba (dünya)) ABC".

Jeff Atwood Ayrıştırma Html Cthulhu Yolu okuyun: http://www.codinghorror.com/blog/archives/001311.html, ve sonra ya bir tarafından el yazması kullanın (dizesindeki karakterler aracılığıyla döngü, karakter bir parantez olup olmadığını görmek, bir yığın korumak) ya da bir bağlam-ücretsiz dil ayrıştırma kapasitesine sahip bir lexer / ayrıştırıcı kullanın.

Ayrıca "düzgün eşleşen parantez dilinde:" Bu wikipedia makalesine bakın http://en.wikipedia.org/wiki/Dyck_language