2014-09-20 71 views
0

我谈的字符串是类似以下内容:正则表达式中的字符串每个点数3

xxxxx.xxxxxx.xxx.yyyyyyy.yyyyyy.yyyyyyyy.zzzz 

其中,x,y和z比其他任何东西“” (点),即字母数字,特殊字符,空格,换行等

我想:

(\w|\d|\s){1,}.\.{3,} 
+1

您的正则表达式正在查找至少3个连续的点。你为什么在那里有{3}? – Barmar 2014-09-20 21:03:00

+1

你真的想要匹配哪部分字符串?你是什​​么意思__点数3_? – Barmar 2014-09-20 21:04:13

+0

我的意思是字符串中的每个第三个点,即假设我们有一个包含10个点的字符串,所以我想匹配点编号:3,6和9. – SaidbakR 2014-09-20 21:08:45

回答

2

使用:

(?:[^.]+\.){3} 

这适用于{3} quanti对整个团队来说更为复杂,而不仅仅是每个团队结束时的.。既然你想匹配3组,我使用{3}; {3,}表示3个或更多组。

它使用更简单的[^.]来匹配除.以外的所有内容(不需要在括号内换算点,因为它没有任何特殊含义)。

要在preg_replace中使用此替换每个第三个点,您需要匹配捕获组中的点之前的所有内容。然后您可以使用$1将其复制到替换字符串。

preg_replace('/((?:[^.]+\.){2}[^.]+)\./', '$1<br/>', $string); 
+0

这是非常好的解决方案,它可能会被其他功能处理。但是,是否有可能与三分之一点本身相匹配? – SaidbakR 2014-09-20 21:21:05

+0

我在点周围添加了一个捕获组。但我不确定为什么你需要自己匹配点,但?它的价值永远只是一个点。 – Barmar 2014-09-20 21:23:32

+0

我有很长的文章文字没有任何换行符,所以我想用'preg_replace()' – SaidbakR 2014-09-20 21:27:30

1

使用^在一个字符前面匹配的一切,但这个人物

([^\.]+\.){3,}