我可能在我的正則表達式知識中有一個漏洞。在正則表達式中的數字範圍
如果我正在嘗試查找可能位於數字範圍內的字符串中的項目,「項目[355-502]」是否有一個簡單的方法來執行此操作。據我可以告訴我將不得不做一些像
(35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])
我知道這也爲3550-5020等相匹配,這應該是罰款
This,表示這不能做任何其他方式,這是正確的。我在PHP中有一個更好的方法來做到這一點?
我可能在我的正則表達式知識中有一個漏洞。在正則表達式中的數字範圍
如果我正在嘗試查找可能位於數字範圍內的字符串中的項目,「項目[355-502]」是否有一個簡單的方法來執行此操作。據我可以告訴我將不得不做一些像
(35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])
我知道這也爲3550-5020等相匹配,這應該是罰款
This,表示這不能做任何其他方式,這是正確的。我在PHP中有一個更好的方法來做到這一點?
這是一個數字問題,而不是一個字符串問題,所以我擔心你的解決方案不完全在於一個正則表達式!
您需要解析的數字,然後執行數值比較,如:
$input = whatever(); # gets something like "item[456]"
...然後用下面的模式匹配:
preg_match("/item\[(\d+)\]/", $input, $match);
...來存儲數字在內存中,然後:
if($match[1] >= 355 and $match[1] <= 502){...
檢查數字是否在範圍內。
我能想到的唯一方法就是保持正則表達式簡單(item [0-9] {3})並執行代碼中的其餘檢查。正則表達式不能解決所有問題:)
匹配數字然後進行數字比較怎麼辦?
[email protected]:~$ more val.php
<?php
function validateItem($item) {
$matches = array();
preg_match("/item(\d+)/",$item, $matches);
if ($matches[1] < 355 || $matches[1] > 502) return false;
return true;
}
var_dump(validateItem("item305"));
var_dump(validateItem("item355"));
var_dump(validateItem("item356"));
var_dump(validateItem("item5454"));
?>
[email protected]:~$ php val.php
bool(false)
bool(true)
bool(true)
bool(false)
是的,這是你如何使用正則表達式來完成它,因爲充其量它們處理數字而不是數字。將^和$添加到開頭,然後篩選超出範圍的數字。是否有理由需要用正則表達式來檢查,在這種情況下是一個尷尬的工具? – 2009-06-23 12:48:32
感謝您的回答,並確認我認爲我所知道的。 – 2009-06-24 10:42:26