正则表达式中的数字范围

时间:2009-06-23 10:02:25

标签: php regex

我可能在我的正则表达式知识中有一个漏洞。

如果我试图在字符串中查找可能在数字范围内的项目“item [355-502]”,那么有一种简单的方法可以做到这一点。据我所知,我必须做一些像

这样的事情
 (35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])

我知道这也匹配3550-5020等,应该没问题

This,表示这不能以任何其他方式完成,这是正确的。我在PHP中是否有更简洁的方法来做到这一点?

3 个答案:

答案 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)