2012-03-18 36 views
0

我是新來正則表達式在PHP中,所以我想知道我將如何拆分下面的soe所有「somethings」存儲在數組中?在字符串中的正則表達式到數組

$string = "something here (9), something here2 (20), something3 (30)"; 

期望的結果:

$something_array = array(
[0] => something 
[1] => something2 
[2] => something3) 

基本上去除 「」 和任何在括號。

回答

3

正則表達式會是這樣的:(.*?) \([^)]*\),? 它使用。 (東西),因爲你的要求的話,但如果它是一個字,你應該使用\ W代替,或者如果它是什麼,但空白\ S因此這將是這樣的:(\S*) \([^)]*\),?

解釋表達:

  • (.*?) - 匹配任何,但在懶惰模式,或「儘可能少」 模式
  • [^)]* - 匹配任何東西,但)儘可能多的
  • \([^)]*\) - 匹配一對括號和它的內容
  • ,? - 匹配一個逗號,如果它是 有

您可以測試所有這些HERE

最後,使用preg_match_all PHP函數,這將是這個樣子:

$str = 'something (this1), something2 (this2), something3 (this3)'; 
preg_match_all('/(\S*) \([^)]*\),?/', $str, $matches); 
print_r($matches); 
+0

我寫了同樣的正則表達式,但你1分鐘快。 +1爲解釋和其他字符類別的建議 – CodeZombie 2012-03-18 02:32:07

+0

這似乎只適用於「某事」是一個字。你會怎麼做,如果它是例如:some1 here(30),something2(10)我應該注意,括號中應該只包含最多100的數字。 – Malcr001 2012-03-18 03:27:58

1

我不會使用像這樣的正則表達式,而只是PHP的explode()函數。

$parts = explode(', ', $string); 
$result = array_map(function($element) { 
    return substr($element, 0, strrpos($element, ' ')); 
}, $parts); 
print_r($result); 

以上將輸出

Array 
(
    [0] => something here 
    [1] => something here2 
    [2] => something3 
) 
+0

我理解這一點,因爲表達式仍然讓我感到困惑但是這隻有在某個詞是某個詞時纔有效。我如何得到下面的工作: 東西在這裏(10),東西(20),在這裏再次(30) – Malcr001 2012-03-18 02:55:42

+0

我編輯了我的原始示例,因爲我在使用多個單詞後跟括號內的數字例如:圖書標籤(30),圖書標籤2(100) – Malcr001 2012-03-18 03:14:33

+0

我已更新我的代碼以符合您的新要求。 – kba 2012-03-18 03:32:09

相關問題