试图在3个变量中拆分一个字符串,但有点棘手 - PHP

时间:2010-12-07 22:10:37

标签: php

几乎涵盖了PHP的基础知识,我决定挑战自己并制作一个简单的计算器。经过一番尝试,我发现了它,但我并不完全满足于此。我想让它更加用户友好,只需一个盒子就可以输入计算器,就像谷歌搜索一样。

所以只需键入:5 + 2 并收到7。

如何将字符串“5 + 2”拆分为三个变量,以便数学函数可以将数字转换为整数并识别运算符,以及考虑某些人在值之间使用空格的可能性?

你会爆炸吗?但是,如果没有空格,你会怎么爆炸呢? 我也偶然发现了preg_split函数,但我似乎无法解决这个问题,或者知道它是否适合解决这个问题。什么方法最适合这个?

4 个答案:

答案 0 :(得分:2)

$calc = "5* 2+ 53";
$calc = preg_replace('/(\s*)/','',$calc);
print_r(preg_split('/([\x28-\x2B\x2D\x2F])/',$calc,-1,PREG_SPLIT_DELIM_CAPTURE));

这是我的出价,导致

Array
(
    [0] => 5
    [1] => *
    [2] => 2
    [3] => +
    [4] => 53
)

答案 1 :(得分:1)

您可能需要使用一些聪明的正则表达式来分割它:

$ myOutput = split(“( - ?[0-9] +)|([+ - * /] {1})|( - ?[0-9] +)”);

我没有测试过 - 只是一个半假的例子抱歉: - >只是想突出显示你需要记住你的 - (减号)运算符可以出现在一个整数的开头,使其成为负数,这样你最终可能会遇到-1-21的问题,这些问题是有效的但是使你的正则表达式规则更复杂。

答案 2 :(得分:0)

您必须使用正则表达式拆分字符串。 例如,5 + 2的简单正则表达式为:

\d\+\d

查看此link。您可以在那里创建和验证正则表达式。对于计算器来说,这并不困难。

答案 3 :(得分:0)

你对preg_split有了正确的想法。它可以这样工作:

$values = preg_split("/[\s]+/", "76  +    23");

结果数组将包含非空格的值:

值应如下所示: $ values [0]:“76” $ values [1]:“+” $ values [2]:“23”

“/ [\ s] + /”是一个正则表达式模式,可以匹配任何空白字符一次或多次。但是,如果根本没有空格,preg_split将只返回原始的“5 + 2”作为数组第一个元素中的单个字符串。即:

$values[0] = "5+2"