Regex & kullanarak String parantez metni kaldırmak

4 Cevap php

Ben bir dize içinde iki parantez arasındaki her şeyi şerit olacak basit bir php fonksiyon yazmaya çalışıyorum.

İşte tipik bir dize gibi görüneceğini budur:

[img_assist|nid=332|title=|desc=|link=none|align=left|width=70|height=61] On November 14, Katherine Grove participated in Tulane University's School of Architecture Continuing Education Conference . She presented the firm's work in a presentation titled "Cradle to Cradle Design for the Built Environment".The Tulane School of Architecture Continuing Education Conference is designed to make continuing education credits available to Tulane School of Architecture alumni and the local architecture community, with a focus on sustainable design. Kathy currently directs the firm’s pro-bono involvement with the nonprofit Make It Right project in New Orleans, including assessment of all materials used in the construction of LEED Platinum certified affordable homes in the Lower 9th Ward. She oversees the firm’s residential studio, including leading the design team for a private residential project in Northern California targeted for LEED Platinum certification

Ben temelde şerit istiyorum "[img_assist | nid = 332 | title = | desc = | link = none | align = left | width = 70 | height = 61]" Metnin ana gövdesinden başında görebilirsiniz .

Zaten preg_replace işlevini kullanarak bir php fonksiyonu kurulum var, ama açıkçası ben regex emmek çünkü ben o iş için alınamıyor.

Eğer (parantez dahil) Yukarıda parantez biraz seçmek için ne regex yazmak istiyorsunuz?

Teşekkürler!

4 Cevap

Burada regex olmadan tek, sadece PHP string fonksiyonları bulunuyor

$str = <<<A
dfsdf[img_assist|nid=332|title=|desc=|link=none|align=left|width=70|height=61] 
On November 14, Katherine Grove participated in Tulane University's School of 
Architecture Continuing Education Conference [img_assist2|nid=332|title=] 
The Tulane School of Architecture Continuing Education  Conference is designed to make 
continuing education credits available to Tulane School of Architecture alumni and the local architecture community, with a focus on sustainable design.
    A;

$s = explode("]",$str);
foreach ($s as $a=>$b){
    if ( strpos($b ,"[")!==FALSE) {
        $z = explode("[",$b);
        $b=$z[0];
    }
    print $b."\n";
}

çıktı

$ php test.php
dfsdf
 On November 14, Katherine Grove participated in Tulane University's School of Architecture Continuing Education Conference
 The Tulane School of Architecture Continuing Education  Conference is designed to make continuing education credits available to Tulane School of Architecture alumni and the local architecture community, with a focus on sustainable design.

Eğer köşeli parantez içinde dize içinde sağ köşeli ayraç içeren asla% 100 emin olabilir miyim? Eğer öyleyse o zaman bu basit regex yeterli olmalıdır:

preg_replace( "/\[[^\]]*\]/m", "", $string );
preg_replace("/\[.*?\]/", "", $mystring);

parantez bir çift ve bunların arasında metin mümkün olan en az miktar ile eşleşir. (- Yani "[a] bc [d]" birden çok ayraç çifti varsa, bu çok fazla çıkarmadan önlemek için).

Parantez içine kaçtı parantez sağlayan bir regex Bir çözüm:

preg_replace("/\[(?:\\\\|\\\]|[^\]])*\]/", "", $mystring);

Açıklama:

\[                # match an opening bracket [
    (?:           # match one of the following...
        \\\\      # first, if possible, match an escaped backslash \\
        |         # or, if unsuccessful...
        \\\]      # match an escaped right bracket \]
        |         # or, if unsuccessful...
        [^\]]     # match any character except a closing bracket ]
    )*            # zero or more times
\]                # finally, match a closing bracket ]

Bu doğru bir maç olacak

[img_assist|text=\[hello\]|nid=332|title=|height=61] 14 Kasım [test\\], Katherine Grove [hello\]] Mimarlık Sürekli Eğitim Konferansı Tulane University School katıldı. O, "Yapılı Çevre için Cradle Tasarım Cradle" başlıklı bir sunumda firmanın çalışmalarını sundu.