2009-12-05 51 views
1

確定這應該是非常容易的,但我不知道我在找...在兩個字符之間拆分字符串?

我想兩個字符

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

retruns : 

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

我不需要任何分裂之間串起來等於括號內的所有內容。

謝謝!

亞瑟

回答

5

您可以用正則表達式做到這一點:

$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 

這將輸出:

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

我的正式表達sion使用非貪婪的選擇器:(.*?)這意味着它將盡可能「小」地抓取。這使得它從開(和結束)多的話怎麼過遠間吃了所有的),抓住一切。

+0

嘿@道格 - neiner你能幫助我,如果我需要等等術語也陣列內的東西。是否有可能通過調整它來使用相同的preg_match_all或者我必須使用爆炸? _thanks in advance_ – xyz 2014-02-27 09:04:28

2

你可以使用preg_match_all喜歡的東西(只是一個快速的草案...):

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

如果你想在括號中的一切,那麼你就應該使用正則表達式。在你的情況,這會做厚:

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

所有使用正則表達式,這裏是一個沒有正則表達式

$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" ; 
    } 
} 
相關問題