2012-01-06 42 views
0

我想在PHP中使用preg_split將字符串拆分爲術語。我需要提取普通單詞(\ w),還需要提供貨幣(即使是貨幣符號)和數字術語(包括逗號和小數點)。任何人都可以幫助我,因爲我似乎無法創建一個有效的正則表達式來使用preg_split來實現此目的。謝謝正則表達式在PHP中分割字母數字,貨幣和數字術語

+0

你能不能給你想要捕捉的東西的例子嗎? – Biotox 2012-01-06 23:19:52

+0

我需要提取諸如: 「1.545」 「$ 143」 「$ 13.43」 「15億」 「你好」 「G9」 感謝您的答覆! – dscer 2012-01-06 23:26:30

+0

看起來你只是想捕捉出現的任何東西。你可以輕鬆地做一個dotall捕獲。它只是'/.+/',或者它們是你需要過濾的字符串嗎?我不明白你試圖分裂的東西。 – Biotox 2012-01-06 23:31:18

回答

1

爲什麼不使用preg_match_all()而不是preg_split()

$str = '"1.545" "$143" "$13.43" "1.5b" "hello" "G9"' 
    . ' This is a test sentence, with some. 123. numbers' 
    . ' 456.78 and punctuation! signs.'; 

$digitsPattern = '\$?\d+(\.\d+)?'; 
$wordsPattern = '[[:alnum:]]+'; 

preg_match_all('/('.$digitsPattern.'|'.$wordsPattern.')/i', $str, $matches); 

print_r($matches[0]); 
+0

這與我所需要的非常接近。是否可以調整正則表達式來排除期限,除了在數字中間? 例如: 「這是一個數字:43234.這些是一些詞。」 你的解決方案導致: 陣列 ( [0] =>此 [1] =>是 [2] =>一個 [3] =>數 [4] => ** 43234 ** [5] =>這些 [6] => [7] =>一些 [8] => **字樣** ) – dscer 2012-01-06 23:52:18

+0

我已經更新了我的答案。你能用新的正則表達式來測試嗎? – 2012-01-06 23:59:12

+0

完美!謝謝! – dscer 2012-01-07 00:03:49

0

它解決您的問題分裂在空白? "/\s+/"

+0

不完全是,因爲我除數字術語外,不想包含標點符號。 – dscer 2012-01-06 23:41:48

1

什麼preg_match_all()這個[\S]+\b每個單詞,然後你得到它的單詞的數組。

大的棕色狐狸 - $ 20.25將返回

preg_match_all('/[\S]+\b/', $str, $matches); 

$matches = array(
[0] = 'Big', 
[1] = 'brown', 
[2] = 'fox', 
[3] = '$20.25' 
) 
+0

謝謝!這是完美的! – dscer 2012-01-07 00:04:19