0

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

因此,如果我输入10.0/5.5/41.1一个像样的preg_replace()(PHP),我希望它找到(并替换).0,.4.1. .小数总是有一个as 限制器。这可以用正则表达式吗?

4

2 回答 2

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

在线正则表达式演示

于 2013-07-03T01:07:26.337 回答
1
<?php
echo preg_replace('/(\d+)(\.\d+)/', '${1}replace_here', '10.23')
?>

它会打印

10replace_here

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

我使用 ${1} 是因为您可能想替换 . 带有一个可能导致错误的数字,因为 $11 是匹配项(匹配 100 次,给您 $0、$1、$2、...、$99)

于 2013-07-03T01:15:00.110 回答