İki karakter arasındaki dize bölmek?

5 Cevap

Tamam bu bir son derece kolay olmalı, ama ben arıyorum bilmiyorum ...

Ben iki karakter arasında bir dize bölmek istiyorum

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";

retruns :

array
1 -> blorp
2 -> bloop
3 -> bam

Ben filan hoşnutsuzluk herhangi parantez içinde sadece her şeyi ihtiyacım yok.

Teşekkürler!

Arthur

5 Cevap

Bir düzenli ifade ile yapabilirsiniz:

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";
preg_match_all("/\((.*?)\)/", $string, $result_array);

print_r( $result_array[1] ); // $result_array[0] contains the matches with the parens

Bu olur çıkış:

Array
(
    [0] => blorp
    [1] => bloop
    [2] => bam
)

Benim düzenli ifade olmayan açgözlü yu kullanır: mümkün olduğu kadar "küçük" olarak kapmak anlamına gelir (.*?) ki. Bu, tüm ) kadar yeme ve ( ve uzak kapanış ) nasıl şimdiye kadar birçok kelime açıklığı arasındaki her şeyi kapma onu tutar.

Sen (sadece hızlı bir taslak ...) gibi bir şey ile preg_match_all kullanabilirsiniz:

preg_match_all("|\([^)]+\)|", $string, $result_array);

Eğer parantez her şeyi istiyorsanız, o zaman normal ifadeler kullanmak gerekir. Senin durumunda, bu kalın yapacak:

preg_match_all('/\(.*?\)/', $string, $matches);

http://php.net/manual/en/function.preg-match-all.php

$matches = array();
$num_matched = preg_match_all('/\((.*)\)/U', $input, $matches);

Tüm kullanarak regex, burada regex olmadan biri

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";
$s = explode(")",$string);
foreach ( $s as $k=>$v ){
    $m= strpos($v,"(" );
    if ($m){
        print substr( $v, $m+1  )  . "\n"  ;
    }
}