如何使用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'後選擇第二部分數字 –