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


Using regex to extract numbers and symbols from string

我有一个包含文本、数字和符号的字符串。我试着从字符串中提取数字和符号,但收效甚微。而不是得到整个数字和符号,我只得到它的一部分。我将在下面解释我的正则表达式,使它更清晰,更容易理解。

'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

去掉U标志。这使得+在匹配中是非贪婪的。此外,你不需要字符列表中的字符之间的逗号。(如果你想匹配它,你只需要1个,。你确实需要逃避-,这样它就不会认为你在尝试创建

范围

这里的问题是您的regex混淆了相当多的未转义元字符。在你的角色类别中,你有[+,-,*,/,0-9]。您不需要用逗号分隔不同的字符,这只会告诉regex引擎在表达式中包含逗号。此外,您需要转义-,因为它在字符类中具有特殊含义。事实上,它将被解释为"从","到"的字符,而不是文字字符"-"。"/"字符也存在类似的问题。表达式'd[+'-*/0-9]+'d应该可以做到这一点。

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

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

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