使用正则表达式从字符串中提取数字和符号

时间:2015-09-30 00:53:23

标签: php regex preg-match-all

我有一个包含文字,数字和符号的字符串。我试图从字符串中提取数字和符号,但成效有限。我没有得到整个数字和符号,而只是获得了它的一部分。我将在下面解释我的正则表达式,使其更清晰,更容易理解。

\d : any number
[+,-,*,/,0-9]+ : 1 or more of any +,-,*,/, or number
\d : any number

代码:

$string = "text 1+1-1*1/1= text";

$regex = "~\d[+,-,*,/,0-9]+\d~siU";
preg_match_all($regex, $string, $matches); 

echo $matches[0][0];

预期结果

1+1-1*1/1

实际结果

1+1

3 个答案:

答案 0 :(得分:2)

这里的问题是你的正则表达式混合了很多未转义的元字符。在你的角色类中,你有[+,-,*,/,0-9]。您不需要用逗号分隔不同的字符,这只会告诉正则表达式引擎在表达式中包含逗号。此外,您需要转义 - ,因为它在字符类中具有特殊含义。实际上,它将被解释为“字符从”,“到”,“而不是字面字符” - “。 “/” - 字符存在类似的问题。表达式\d[+\-*/0-9]+\d应该可以解决问题。

答案 1 :(得分:2)

删除U标志。这导致+在匹配中不合适。此外,您的角色列表中的字符之间不需要逗号。 (如果你正在尝试匹配它,你只需要1 ,。你需要逃避-,以便它不会认为你想要制作一个范围

答案 2 :(得分:-3)

没有使用您的代码测试它,但应该可以工作:)

((?:[0-9]+[\+|\-|\*|\/]?)+)

更多细节,如果您想了解我的模式:https://regex101.com/r/mF0zO8/2