Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式从字符串中删除句点/句点,但不从内部数字中删除句点/句点_Php_Regex - Fatal编程技术网

Php 正则表达式从字符串中删除句点/句点,但不从内部数字中删除句点/句点

Php 正则表达式从字符串中删除句点/句点,但不从内部数字中删除句点/句点,php,regex,Php,Regex,我正在寻找一个正则表达式来删除字符串中的句点/句点,而不是从内部数字中删除句点/句点,并替换为空格 $str1 = 'some.text.1.2.3.more.text'; $str2 = preg_replace('/(?<!\d)[._](?![._\d])/', ' ', $str1); $str1='some.text.1.2.3.more.text'; $str2=preg_replace('/(?使用此选项。在替换字符之前,它会查找左侧的非数字或右侧的非数字 $str2 =

我正在寻找一个正则表达式来删除字符串中的句点/句点,而不是从内部数字中删除句点/句点,并替换为空格

$str1 = 'some.text.1.2.3.more.text';
$str2 = preg_replace('/(?<!\d)[._](?![._\d])/', ' ', $str1);
$str1='some.text.1.2.3.more.text';

$str2=preg_replace('/(?使用此选项。在替换字符之前,它会查找左侧的非数字或右侧的非数字

$str2 = preg_replace('/(?<=\D)[._]|[._](?=\D)/', ' ', $str1);

$str2=preg_replace('/(?您就快到了。您需要的是替换前面没有数字或后面没有数字的点/下划线:

$str2 = preg_replace('/((?<!\d)[._])|([._](?![._\d]))/', ' ', $str1);

$str2=preg_replace('/(?另一种方法:

$str2 = preg_replace('~\d[._\d]*\d(*SKIP)(?!)|[._]~', ' ', $str1);

由于
(?!)
(总是错误的断言)和
(*SKIP)
回溯控制谓词,第一部分总是失败。

@HamZa是的。它无法删除
。这种情况下,将前瞻更改为
(?=\D |$)后,它将工作
。为什么不使用
(*失败)
?或者这只是一种偏好?@HamZa:谢谢您的编辑!没有特殊原因,可以更改或缩短它。