首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析并匹配计算字符串

解析并匹配计算字符串
EN

Stack Overflow用户
提问于 2013-04-01 22:15:35
回答 3查看 266关注 0票数 1

如何解析和匹配计算字符串?

这是我的代码:

代码语言:javascript
运行
复制
$pattern = '/(?:\d+(?:\.\d+)?\D)+\d+(?:\.\d+)/';
$input = [
    '1.0+2.5*5.4',
    '5*8-4'
];
foreach($input as $string){
    preg_match($pattern, $string, $match);
    print_r($match);
}

我不知道我做错了什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-01 22:19:11

这是因为"?“的贪婪,试试"+”,如下所示:

代码语言:javascript
运行
复制
$pattern = '/(?:\d+(?:\.\d+)?\D)+\d+(?:\.\d+)/';
$input = '34.27-15.44/8.44';
echo $input."\n";
preg_match($pattern, $input, $match);
print_r($match);

至于你的编辑:

代码语言:javascript
运行
复制
$pattern = '/(?:\d+(?:\.?\d+)?\D)+\d+/';
$input = [
    '1.0+2.5*5.4',
    '5*8-4',
    '5*8-4string',
    'string5*8-4',
    'string'
];
foreach($input as $string){
    preg_match($pattern, $string, $match);
    print_r($match);
}

它提供了:

代码语言:javascript
运行
复制
Array
(
    [0] => 1.0+2.5*5.4
)
Array
(
    [0] => 5*8-4
)
Array
(
    [0] => 5*8-4
)
Array
(
    [0] => 5*8-4
)
Array
(
)

正如我怀疑你想要的那样。

http://codepad.viper-7.com/4FoQnB

票数 2
EN

Stack Overflow用户

发布于 2013-04-01 22:23:15

根据您的表达式,结果是预期的。

请注意,\D只能匹配一次(或随机数)。\D已与-匹配,因此没有任何其他内容可以与/匹配。

您可能想通过在表达式的较大部分上放置一个量词来解决这个问题,但让我预测一下您将面临的问题,并建议您使用一个循环,一次替换一个操作数-运算符-操作数三元组,当无法进行替换时退出。这是因为没有一个单遍正则表达式可以正确地管理操作顺序(例如PEMDAS)。

票数 0
EN

Stack Overflow用户

发布于 2013-04-01 22:25:57

尝尝这个。它适用于整数和浮点数:

代码语言:javascript
运行
复制
 $pattern = '/(?:\d+(?:(\.|)\d*)?\D)*\d*(?:(\.|)\d+)/';
 $input =array(
   '1.0+2.5*5.4',
   '5*8-4',
   '5*8-4string'
 );
 foreach($input as $string){
    echo "input:".$string."\n";
    preg_match($pattern, $string, $match);
    print_r("output:".$match[0]."\n");
  }

输出:

代码语言:javascript
运行
复制
 input:1.0+2.5*5.4
 output:1.0+2.5*5.4
 input:5*8-4
 output:5*8-4
 input:5*8-4string
 output:5*8-4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15745102

复制
相关文章

相似问题

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