2011-04-17 75 views
1

我想用下面的正则表达式用PHP在字符串的开始替换字符的所有重复:正则表达式的问题与PHP

^.{3,5000} 

如果我使用

echo preg_replace('#\^.{3,5000}#i', '', '------This is a test.'); 

回音必文本“------这是一个测试。”尽管正则表达式本身在任何正则表达式测试器中都能正常工作。

再见, 基督教

+0

你为什么在插入符号前加上反斜线?现在它匹配一个文字'^',而不是像你想要的字符串的起始位置。 – 2011-04-17 20:32:33

回答

6

试试这个:

<?php 
echo preg_replace('#^(.)\1{3,5000}#', '', '------This is a test.'); 
?> 

,它将打印:

This is a test. 

,你可以看到Ideone

请注意,围绕.的圆括号存储与组1中匹配的任何内容。然后将组1重复3到5000次。因此,总共至少匹配4个重复字符。如果你想匹配(后和任意量)至少3个重复字符,你可以做这样的事情:

'#^(.)\1{2,}#' 

(由{2,}省略第二整数值,你会匹配任何金额。总之,{2,}的意思是:“两个或更多”)

+0

谢谢巴特!这正是我正在寻找的...... – itsame69 2011-04-19 07:03:43

0

你已经逃脱了^!将其更改为^.{3,5000},它应该可以工作。

+2

但是,这只会取代3到5000个字符(换行符除外),而不仅仅是重复的字符串。 – 2011-04-17 18:42:03

+0

对不起,他说它在第一篇文章中使用正则表达式测试人员,所以我没有想到:P – Ryan 2011-04-17 18:44:35

+0

:),是的,尽管正则表达式引擎不会产生任何错误消息, OP的意思是“它的工作原理”)。 – 2011-04-17 18:49:41