如何使用preg_match
从字符串中选择两个数字? 我之前使用preg_match
来只选择和#
标记。 例如我需要选择方程中的两个数字:从字符串中选择两个数字
“whats 23x347?” 并给我一个输出变量这样:但是
$first_number = 23
$seccond_number = 347
list($first_number, $second_number) = preg_split("/x/",$message);
工作不前或后删除非数字文本。
如何使用preg_match
从字符串中选择两个数字? 我之前使用preg_match
来只选择和#
标记。 例如我需要选择方程中的两个数字:从字符串中选择两个数字
“whats 23x347?” 并给我一个输出变量这样:但是
$first_number = 23
$seccond_number = 347
list($first_number, $second_number) = preg_split("/x/",$message);
工作不前或后删除非数字文本。
你可以用两种方法做到这一点。 preg_split会是最简单的,但preg_match也可以工作,这只是一点点工作。
使preg_split
$equation = "23x347";
list($first_number, $second_number) = preg_split("/x/",$equation);
print_r(array('first_number' => $first_number, 'second_number' => $second_number));
使preg_split将返回两个值作为单独的列表元素。
Array
(
[first_number] => 23
[second_number] => 347
)
的preg_match
$equation = "23x347?";
list($first_number, $second_number) = preg_match("/(\d+)x(\d+).*/",$equation);
print_r($matches);
的preg_match将填充$匹配阵列
Array
(
[0] => 3x347?
[1] => 23
[2] => 347
)
非常感谢!这工作得很好,preg_split之一。 只是一个问题,我注意到它并没有将最后一个数字与文本分开? 如果我有23x347? 它会回显1st:23 2nd:347? –
啊,这是可以做到的,但你必须为此使用不同的正则表达式。这不是原始问题的一部分,所以我没有回答这个问题。 – jbrahy
我已更新问题 –
如果匹配在中间作为一个数学符号运算符,你可以传递到另一个功能,然后能够评估几种表达类型:添加,替换等。
Si mple的preg_match
preg_match("/(\d+)\s*?(\*|\.|x|\-|\+|\/|\%|\^)\s*?(\d+)/", $str, $matches)
在一些功能上
function parseExpression($str='')
{
if (preg_match("/(\d+)\s*?(\*|\.|x|\-|\+|\/|\%|\^)\s*?(\d+)/", $str, $matches)) {
$number_1 = $matches[1];
$operator = $matches[2];
$number_2 = $matches[3];
return calculate($number_1, $operator, $number_2);
}
return false;
}
function calculate($number_1, $operator, $number_2)
{
if ($operator === 'x' || $operator === '*' || $operator === '.') {
return $number_1 * $number_2;
} elseif ($operator === '-') {
return $number_1 - $number_2;
} elseif ($operator === '+') {
return $number_1 + $number_2;
} elseif ($operator === '/') {
return $number_1/$number_2;
} elseif ($operator === '%') {
return $number_1 % $number_2;
} elseif ($operator === '^') {
return pow($number_1, $number_2);
} else {
return false;
}
}
echo var_dump(parseExpression('23x347')); // int(7981)
echo var_dump(parseExpression('8.8')); // int(64)
echo var_dump(parseExpression('23*347')); // int(7981)
echo var_dump(parseExpression('23-347')); // int(-324)
echo var_dump(parseExpression('8/3')); // float(2.6666666666667)
echo var_dump(parseExpression('8%7')); // int(1)
echo var_dump(parseExpression('2^2')); // int(4)
echo var_dump(parseExpression('2^2')); // int(4), whitespace ok
echo var_dump(parseExpression('')); // bool(false)
echo var_dump(parseExpression()); // bool(false)
echo var_dump(parseExpression('1')); // bool(false)
echo var_dump(parseExpression('0')); // bool(false)
echo var_dump(parseExpression(1)); // bool(false)
echo var_dump(parseExpression('whats 23x347?')); // int(7981)
正则表达式的简单说明使用正则表达式:
可选的空间匹配允许短语像“2 * 2”或“2 * 2”
可能重复[使用preg \ _match从字符串获取数字](http://stackoverflow.com/questions/15408673/get-numbers-from-string-using -preg-match) – wogsland
只是为了识别'x'?关于'-','+','/'等等呢?或“344sometext654”? – AdamJeffers
我已经有一个脚本来选择这样的功能。我只需要在'x'之前选择第一部分数字,然后在'x'后选择第二部分数字 –