好的,您可以做的是創建一個允許的單位數組,然後使用array_map
在數組中的每個單位上應用preg_quote
(這樣如果單位中有任何字符是正則表達式中的特殊字符它們將被轉義),然後構造一個正則表達式:
$units = array("tbsp", "ml", "g", "grams"); // add whatever other units are allowed
$pattern = '/^(\d+)\s*(' . join("|", array_map("preg_quote", $units)) . ')$/';
的$pattern
將因此變得像/^(\d+)\s*(tbsp|ml|g|grams)$/
,然後你可以用它來檢測的東西,看起來像你的串單位:
$matches = array();
// assuming you have an array of measurement strings...
foreach ($measurement_strings as $measurement)
{
preg_match($pattern, $measurement, $matches);
list(, $quantity, $unit) = $matches;
// ...
}
由於該模式定義了兩個捕獲組,分別針對數量和單位,您可以從匹配中提取那些並按照您的要求進行操作。
(我更新了我的答案,根據問題更新,每行是一個單獨的字符串)。
他們會永遠在這樣的名單?或者有時會有其他文字? – hookedonwinter 2010-08-07 15:15:33
@hookedonwinter - 只是自己。沒有其他文字。 – 32423hjh32423 2010-08-07 15:19:16