PHP: koşul doğruysa bir dizeden metni silmek için Düzenli İfade

3 Cevap php

Ben bir dize içeren bir değişken var. Dize çeşitli şekillerde gelebilir:

// some examples of possible string
$var = 'Tom Greenleaf (as John Dunn Hill)'
// or
$var = '(screenplay) (as The Wibberleys) &'
// or
$var = '(novella "Four Past Midnight: Secret Window, Secret Garden")'

Ben sadece ilk elemanı almak için dize kadar temizlemek gerekir. gibi bu:

$var = 'Tom Greenleaf'
$var = 'screenplay'
$var = 'novella'

Bunu yapmak için biraz karmaşık olduğunu biliyoruz ama biz kullanabileceğiniz bir model var.

Dize 'olarak (' o zaman biz silmek gerekir yoksa. '(As' metin ve bundan sonra gelen her şeyi içeriyorsa ilk değişken baktığımızda, biz ilk kontrol edebilirsiniz.

İkinci değişken biz ilki yapılan kural da geçerlidir. Biz sadece parantez silmek de gerekir.

Üçüncü değişken eğer '(' biz sadece ilk sözcüğü almak ve daha sonra parantez silmenize gerek bulunmadı.

Peki, tüm thas. Ben sadece PHP için yeni ve ben normal ifadeler bilmiyorum çünkü bana bu konuda yardımcı birine ihtiyacım var .... ya da bunu yapmak için başka bir yolu.

Teşekkürler!!

3 Cevap

Bu normal ifade deneyin:

(?:^[^(]+|(?<=^\()[^\s)]+)

Bu sizi ya ilk parantez içindeki ilk parantez veya ilk kelime kadar bir şey almak olacaktır. Birlikte preg_match,

preg_match('/(?:^[^(]+|(?<=^\\()[^\\s)]+)/', $var, $match);

Aslında, karmaşık regex için gerek yok

$var = 'Tom Greenleaf (as John Dunn Hill)';
$var = '(novella "Four Past Midnight: Secret Window, Secret Garden")';
$var = '(screenplay) (as The Wibberleys) &';
if (  strpos($var,"(as") !== FALSE ){
    # get position of where (as is
    $ind =  strpos($var,"(as");    
    $result = substr($var,0,$ind);        
}else {
    # if no (as, split on spaces and get first element
    $s = preg_split("/\s+/",$var);    
    $result = $s[0];
}      
print  preg_replace( "/\(|\)/","",$result);

Bu deneyin

^\((?<MATCH>[^ )]+)|^(?<MATCH>[^ ]+)