使用正则表达式从字符串中提取数字和符号
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
这里的问题是您的正则表达式确实混淆了很多未转义的元字符。在你的角色 class 中你有 [+,-,*,/,0-9]
。您不需要用逗号分隔不同的字符,这只会告诉正则表达式引擎在您的表达式中包含逗号。此外,您需要对 - 进行转义,因为它在字符 class 中具有特殊含义。实际上,它将被解释为“从“,”到“,”的字符,而不是文字字符“-”。 “/”字符也存在类似的问题。表达式 \d[+\-*/0-9]+\d
应该可以解决问题。
没有用您的代码对其进行测试,但应该可以工作:)
((?:[0-9]+[\+|\-|\*|\/]?)+)
更多细节,如果你想了解我的模式:https://regex101.com/r/mF0zO8/2
删除 U 标志。它导致 +
在其匹配中是非贪婪的。此外,您的字符列表中的字符之间不需要逗号。 (你只需要 1 ,
如果你想匹配它。你确实需要转义 -
这样它就不会认为你正在尝试制作一个范围
我有一个包含文本、数字和符号的字符串。我试图从字符串中提取数字和符号,但收效甚微。我没有得到全部的数字和符号,而是得到了其中的一部分。我将在下面解释我的正则表达式,使其更清晰,更容易理解。
\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
这里的问题是您的正则表达式确实混淆了很多未转义的元字符。在你的角色 class 中你有 [+,-,*,/,0-9]
。您不需要用逗号分隔不同的字符,这只会告诉正则表达式引擎在您的表达式中包含逗号。此外,您需要对 - 进行转义,因为它在字符 class 中具有特殊含义。实际上,它将被解释为“从“,”到“,”的字符,而不是文字字符“-”。 “/”字符也存在类似的问题。表达式 \d[+\-*/0-9]+\d
应该可以解决问题。
没有用您的代码对其进行测试,但应该可以工作:)
((?:[0-9]+[\+|\-|\*|\/]?)+)
更多细节,如果你想了解我的模式:https://regex101.com/r/mF0zO8/2
删除 U 标志。它导致 +
在其匹配中是非贪婪的。此外,您的字符列表中的字符之间不需要逗号。 (你只需要 1 ,
如果你想匹配它。你确实需要转义 -
这样它就不会认为你正在尝试制作一个范围