我正在寻找简单的愚蠢解决方案,从字符串中的数字中移除分隔符。
此功能将2.000 BC
替换为2000 BC
:
$text preg_replace("/^[0-9.]+$/", "", $text);
示例:
$text = 'Lorem ipsum dolor. Consetetur elitr 2.000 BC sed diam nonumy 300.'
// Current behaviour (the delimeter at the end ot the line disappears):
// Lorem ipsum dolor. Consetetur elitr 2000 BC sed diam nonumy 300
// Expected behaviour:
// Lorem ipsum dolor. Consetetur elitr 2000 BC sed diam nonumy 300.
答案 0 :(得分:3)
您可以不用任何内容替换(?<=\d)\.(?=\d)
:
<?php
$text = 'Lorem ipsum dolor. Consetetur elitr 2.000 BC sed diam nonumy 300.';
$text = preg_replace('/(?<=\d)\.(?=\d)/', '', $text);
var_dump($text);
//string(64) "Lorem ipsum dolor. Consetetur elitr 2000 BC sed diam nonumy 300."
正则表达式尸检:
(?<=\d)
- 匹配数字的正面背后照(这不会被替换) - 基本上这要求.
前面有数字 \.
- 一个文字.
字符,转义为.
表示&#34;任何字符&#34;在正则表达式 (?<=\d)
- 与数字匹配的正向前瞻(这不会被替换) - 基本上这需要.
后跟数字 答案 1 :(得分:0)
要匹配仅存在于数字内的分隔符,
\d+\K\.(?=\d+)
你的PHP代码应该是,
<?php
$string = 'Lorem ipsum dolor. Consetetur elitr 2.000 BC sed diam nonumy 300.';
$pattern = "~\d+\K\.(?=\d+)~";
$replacement = "";
echo preg_replace($pattern, $replacement, $string);
?>
<强>输出:强>
Lorem ipsum dolor. Consetetur elitr 2000 BC sed diam nonumy 300.
<强>解释强>
\d+
一位或多位数。\K
丢弃之前匹配的字符。.(?=\d+)
匹配一个应该后跟一个或多个数字的文字点。