首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析包含最小和最大变量的值范围的字符串v2

解析包含最小和最大变量的值范围的字符串v2
EN

Stack Overflow用户
提问于 2009-11-23 19:47:36
回答 5查看 225关注 0票数 1

我需要根据以下规则将一个字符串解析为两个变量,我正在寻找在PHP中实现这一目标的最佳方法:

代码语言:javascript
运行
复制
"40.3" -> minval=40.3, maxval=40.3
"-40.3" -> minval=-40.3, maxval=-40.3
"40.3-60.76" -> minval=40.3, maxval=60.76
"-40.3-60.76" -> minval=-40.3, maxval=60.76
"-60.76--40.3" -> minval=-60.76, maxval=-40.3

不幸的是,我必须同时使用负值和范围分隔符。

这与我之前的问题非常相似:

Parse string containing range of values to min and max variables

(我已经发布了第二个问题,但注意到我弄乱了表格。希望现在一切都好。)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-23 19:57:09

虽然我尽量避免使用正则表达式,但在这种情况下,我会使用正则表达式。我认为这应该与您的所有字符串匹配:

代码语言:javascript
运行
复制
preg_match('/^(?P<min>-?\d+(\.\d+)?)(-(?P<max>-?\d+(\.\d+)?))?/', $string, $matches);
$min = $matches['min'];
if (isset($matches['max'])) {
     $max = $matches['max'];
}

(正则表达式的长度是在日常编码中避免它们的一个很好的理由)

票数 5
EN

Stack Overflow用户

发布于 2009-11-23 20:24:44

当遇到这样的问题时,您可以尝试用某种Backus-Naur形式来表示它:

代码语言:javascript
运行
复制
Range := Number | Number "-" Number
Number := Sign Digits
Sign := "" | "-"
Digits := Digit* | Digit* "."  Digit*

并从中创建正则表达式。

票数 5
EN

Stack Overflow用户

发布于 2009-11-23 20:09:31

如果您不想使用正则表达式,此函数将执行此操作:

代码语言:javascript
运行
复制
function parse_range($range) {
    list($from, $to) = explode('-', substr($range, 1), 2);
    $from = $range[0] . $from;
    if (!$to and $to !== '0') {
        $to = $from;
    }
    return array($from * 1, $to * 1);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1782658

复制
相关文章

相似问题

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