preg_replace int,decimal,negative numbers

问题描述 投票:0回答:2

替换所有号码。消极的,积极的,用逗号,点等分隔

我有

  $txt = "car -12 and dog 3.1416 and cat 98 and 4,12 and flowers = 0.1 and -75";

我喜欢

$txt = "car NUM and dog NUM and cat NUM and NUM and flowers = NUM and NUM";

请帮忙

php regex preg-replace
2个回答
1
投票
$a = preg_replace('/(-)?[0-9]+(.)?[0-9]+/','NUM',$txt);

0
投票

代码:(Demo

$txt = "car -12 and dog 3.1416 and cat 98 and 4,12 and flowers = 0.1 and -75";
echo "EXPECT: car NUM and dog NUM and cat NUM and NUM and flowers = NUM and NUM\n";
echo "OUTPUT: ",preg_replace('~-?\d*[,.]?\d+~','NUM',$txt);

输出:

EXPECT: car NUM and dog NUM and cat NUM and NUM and flowers = NUM and NUM
OUTPUT: car NUM and dog NUM and cat NUM and NUM and flowers = NUM and NUM

分解:

~      #pattern delimiter
-?     #match zero or one hyphen
\d*    #match zero or more digits
[,.]?  #match zero or one character in list: comma or dot
\d+    #match one or more digits
~      #pattern delimiter

如果此模式在所有输入字符串上没有按预期执行,请更新您的问题以包含这些麻烦的字符串并留下评论,我将更新我的答案。

*笔记:

  • 我不使用任何捕获组,因为捕获组花费更多“步骤”(减慢正则表达式引擎)。
  • 字符类.中的[.]不需要被转义为字面处理。在字符类之外使用.需要以某种方式进行转义,否则将被视为“任何非换行符”。
© www.soinside.com 2019 - 2024. All rights reserved.