我可能在我的正则表达式知识中有一个漏洞。
如果我试图在字符串中查找可能在数字范围内的项目“item [355-502]”,那么有一种简单的方法可以做到这一点。据我所知,我必须做一些像
这样的事情 (35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])
我知道这也匹配3550-5020等,应该没问题
This,表示这不能以任何其他方式完成,这是正确的。我在PHP中是否有更简洁的方法来做到这一点?
答案 0 :(得分:9)
这是一个数字问题而不是字符串问题,所以我担心你的解决方案并不完全属于正则表达式!
您需要解析数字,然后执行数字比较,例如:
$input = whatever(); # gets something like "item[456]"
...然后匹配以下模式:
preg_match("/item\[(\d+)\]/", $input, $match);
...将数字存储在内存中,然后:
if($match[1] >= 355 and $match[1] <= 502){...
检查数字是否在范围内。
答案 1 :(得分:3)
我能想到的另一种方法是保持正则表达式简单(项[0-9] {3})并在代码中执行其余的检查。正则表达式无法解决所有问题:)
答案 2 :(得分:1)
如何匹配数字然后进行数字比较?
vinko@mithril:~$ 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"));
?>
vinko@mithril:~$ php val.php
bool(false)
bool(true)
bool(true)
bool(false)