Php 正则表达式中的数字范围

Php 正则表达式中的数字范围,php,regex,Php,Regex,我的正则表达式知识可能有漏洞 如果我试图在字符串中查找可能在数字范围“item[355-502]”内的项,有一种简单的方法可以做到这一点。据我所知,我必须做一些类似的事情 (35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2]) 我知道这也适用于3550-5020等,应该可以 表示这不能通过其他方式完成,对吗。我是PHP的,有没有更简洁的方法 我能想到的唯一其他方法是保持正则表达式的简单性(项[0-9]{3}),并执行其余的签入代码。正则表达式不能解决所有问题:)这

我的正则表达式知识可能有漏洞

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

 (35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])
我知道这也适用于3550-5020等,应该可以


表示这不能通过其他方式完成,对吗。我是PHP的,有没有更简洁的方法

我能想到的唯一其他方法是保持正则表达式的简单性(项[0-9]{3}),并执行其余的签入代码。正则表达式不能解决所有问题:)

这是一个数值问题,而不是字符串问题,所以我担心您的解决方案不完全在正则表达式中

您需要解析数字,然后执行数字比较,例如:

$input = whatever(); # gets something like "item[456]"
…然后与以下模式匹配:

preg_match("/item\[(\d+)\]/", $input, $match);
…将数字存储在内存中,然后:

if($match[1] >= 355 and $match[1] <= 502){...

如果($match[1]>=355和$match[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)
vinko@mithril:~$more val.php
vinko@mithril:~$php val.php
布尔(假)
布尔(真)
布尔(真)
布尔(假)

是的,这就是正则表达式的使用方法,因为它们最多只能处理数字,而不是数字。在开头添加“^”和“$”,并过滤超出范围的数字。您是否有理由需要使用正则表达式进行检查,这是一个在这种情况下很难使用的工具?谢谢您的回答,并确认我所知道的这差不多就是我最后做的。谢谢