2012-08-05 62 views
0

我怎麼迴應的話,如果他們(間),這裏是我的例子:獲取話括號內

<?php 
$text = "(test1) ignore this right here (test2) ignore (test3)"; 
Echo get_texts_between("()",$text); 
?> 

輸出應該是: TEST1 TEST2 TEST3

+0

除了()之外還有其他的東西嗎?像點或逗號一樣? – arnoudhgz 2012-08-05 15:13:25

回答

2

可以使用的preg_match爲:

$text = "(test1) ignore this right here (test2) ignore (test3)"; 
$pattern = '/\(([a-z0-9]+)\)/'; 
preg_match_all($pattern, $text, $matches); 

echo implode(' ', $matches[1]); 

注意:此僅匹配在()a-z0-9。這將符合你的例句。如果您只匹配例如4個字母和1個數字,或者當組內可能還有其他角色時,您將不得不添加更多您想要在OP中匹配的示例。

+2

其實,在你發佈之前,你應該測試你的答案...... – arnoudhgz 2012-08-05 15:01:37

+0

@arnoudhgz爲什麼?它不工作?如果它沒有確定地工作,你的評論就會有意義。我也沒有拼寫檢查員寫英文。我還應該在SO上發佈時啓用拼寫檢查嗎? – PeeHaa 2012-08-05 15:04:44

+0

也許它有效,但我不想爲你測試它。其實我試圖解決這個案子並測試我的答案。而且您只需快速發佈答案而不進行測試。 – arnoudhgz 2012-08-05 15:12:11

2

您可以更換零件做(preg_replace)你不感興趣,用一個空格:

echo preg_replace('~^\(|\)[^\(]*\(|\)$~', ' ', $text); 

這是一個正則表達式匹配要麼在字符串^\(開頭的單開括號,字符串\)[^\(]*\(內的關閉和開放括號部分或字符串\)$末尾的單個關閉括號。

如果您不需要結尾斜線,請爲其添加一個簡單的trim。另外也有preg_split

echo implode(' ', preg_split('~^\(|\)[^\(]*\(|\)$~', $text, -1, PREG_SPLIT_NO_EMPTY)); 

但它有點複雜在一行我會說。模式是相同的順便說一句。