我想替换字符串中出现的所有点(.),而不是数字或数值。我举了个例子
STRING : 10.10.2015 11.30 09/2007 83 HELLO.HOW.ARE.YOU $.###
OUTPUT : 10.10.2015 11.30 09/2007 83 HELLO HOW ARE YOU $ ###
我尝试在 php 中使用 preg_replace
使用非捕获后看组来测试前一个字符是否为数字
$string = '10.10.2015 11.30 09/2007 83 HELLO.HOW.ARE.YOU $.###';
$result = preg_replace('/(?<=[^'d])'./', ' ', $string);
var_dump($result);
解释
(?<=[^'d])'.
-------- --
^ ^
| |
| ------------------ Escape the `.` so we're working with a literal
| dot rather than "any character"
|
----------------------- Look for any preceding non-digit character
but don't include it in the replace group
我不是preg_replace大师,所以我写了一个函数,它会将您的字符串拆分为数组,然后检查是否存在任何.
,如果它找到一个点,它将检查,如果点位于 2 个数字之间。如果是,我的函数将.
替换为:
function removeDots($string) {
$arr = str_split($string);
foreach($arr as $key => $val) {
if($val == ".") {
if(!is_numeric($arr[$key-1]) && !is_numeric($arr[$key+1])) {
$arr[$key] = " ";
}
}
}
return implode($arr);
}
结果如下:
$str = "STRING : 10.10.2015 11.30 09/2007 83 HELLO.HOW.ARE.YOU $.###";
echo removeDots($str);
输出:
字符串 : 10.10.201511.30 09/2007 83 你好,你好吗 $ ###