我的判断力可能有一个漏洞。
如果我试图在字符串中查找可能在数字范围"item355-502“中的项,那么有一种简单的方法可以做到这一点。据我所知,我要做的事情是
(35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])我知道这也是3550-5020等的比赛,那应该可以。
这,指出,这不能以任何其他方式进行,这是正确的。我在PHP里有更整洁的方法吗?
发布于 2009-06-23 10:05:57
这是一个数值问题,而不是字符串问题,所以我担心您的解决方案并不完全取决于正则表达式!
您需要解析这些数字,然后执行数字比较,例如:
$input = whatever(); # gets something like "item[456]"...then匹配的模式如下:
preg_match("/item\[(\d+)\]/", $input, $match);...to将数字存储在内存中,然后:
if($match[1] >= 355 and $match[1] <= 502){...以检查该数字是否在范围内。
发布于 2009-06-23 10:04:40
我能想到的唯一其他方法是保持regex简单(item0-9{3}),并在代码中执行其余的签入操作。正则表达式不能解决所有问题:)
发布于 2009-06-23 10:11:51
如何匹配数字,然后进行数字比较呢?
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)https://stackoverflow.com/questions/1031655
复制相似问题