使用正则表达式查找数字的分数

时间:2013-07-03 00:59:06

标签: php regex

我对正则表达式不好,可能需要帮助来识别数字的分数。 (分数是正确的单词吗?我的意思是.背后的数字,如.5中的2.5

因此,如果我将10.0/5.5/41.1输入到正确的preg_replace()(PHP)中,我希望它能够找到(并替换).0.4.1 。对于小数,总是有一个.限制器。这是正确的吗?

2 个答案:

答案 0 :(得分:4)

您可以使用以下模式:(\d+)(\.\d+)并替换为$1<span class="foo">$2</span>

PHP代码

$string = '10.0/5.5/41.1';
$output = preg_replace('#(\d+)(\.\d+)#', '$1<span class="foo">$2</span>', $string);
var_dump($output);

<强>输出

string '10<span class="foo">.0</span>/5<span class="foo">.5</span>/41<span class="foo">.1</span>' (length=88)

<强>解释

  • (\d+):匹配一个或多个数字并放入第1组
  • (\.\d+):匹配一个点和一个或多个数字并放入第2组
  • 替换是非常基本的,我们使用$n
  • 调用组

Online regex demo

答案 1 :(得分:1)

<?php
echo preg_replace('/(\d+)(\.\d+)/', '${1}replace_here', '10.23')
?>

它会打印

10replace_here

匹配。你用 \。因为。是一个通配符,用于在谈论正则表达式时匹配任何内容。 要匹配一个或多个数字,请使用\ d +(+至少为1)。所以基本上,模式是说我将匹配左侧部分。和严谨的部分(包括。)。你可以在括号内看到它。您可以使用$ n调用匹配的内容,其中n是位置。所以你将有两场比赛。 $ 1会给你左边的。而2美元将给予正确的一面。

我使用了$ {1}因为你想要替换它。有一个可能导致错误的数字,因为11美元是匹配(它匹配100次给你0美元,1美元,2美元,......,99美元)