首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式中的数字范围

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

Stack Overflow用户
提问于 2009-06-23 10:02:24
回答 3查看 7.4K关注 0票数 2

我的判断力可能有一个漏洞。

如果我试图在字符串中查找可能在数字范围"item355-502“中的项,那么有一种简单的方法可以做到这一点。据我所知,我要做的事情是

代码语言:javascript
复制
 (35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])

我知道这也是3550-5020等的比赛,那应该可以。

这,指出,这不能以任何其他方式进行,这是正确的。我在PHP里有更整洁的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-23 10:05:57

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

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

代码语言:javascript
复制
$input = whatever(); # gets something like "item[456]"

...then匹配的模式如下:

代码语言:javascript
复制
preg_match("/item\[(\d+)\]/", $input, $match);

...to将数字存储在内存中,然后:

代码语言:javascript
复制
if($match[1] >= 355 and $match[1] <= 502){...

以检查该数字是否在范围内。

票数 9
EN

Stack Overflow用户

发布于 2009-06-23 10:04:40

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

票数 4
EN

Stack Overflow用户

发布于 2009-06-23 10:11:51

如何匹配数字,然后进行数字比较呢?

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1031655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档