仅当有多个点时,才需要RegEx从字符串中删除点

时间:2014-05-26 11:20:33

标签: regex replace preg-replace keyword

你好,我有像

这样的字符串
tda2030 100.200.300 circuit

我想检查这个字符串是否包含任何包含多于1个点的关键字(由空格分隔但可以在开头或结尾处),然后删除这些点。

结果应为

tda2030 100200300 circuit
在示例中

。 我尝试了很多,但我认为我需要一个正则表达式:)提前谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题,因为你需要有多个点,并且事实上PCRE不允许无限宽度的外观,看看我们后面是否有一个点。我们将使用\K\G来克服这一限制。

这是一个可以找到正确点的正则表达式(参见在线demo

(?<=\w)\.(?=\w+\.)|\G\w+\K\.

使用preg_replace替换为空字符串:

$replaced = preg_replace("~(?<=\w)\.(?=\w+\.)|\G\w+\K\.~","",$string);

它是如何运作的?

我们有两个案例由|(OR)

分隔
  1. 匹配一个前面至少有一个单词字符的点,后跟一些单词字符和一个点
  2. 匹配上一场比赛后面的一个点(必须是一个点)和一些单词字符