2011-07-28 34 views

回答

3

编辑:这对我的作品

$pattern = "/(?<=(\s\w{10}))(\w*\s)/"; 

这种模式有效地匹配任何单词字符的字符后面有一个空格,空格和10名字的字符之前被认为。

然后只需要调用是这样的:

preg_replace($pattern,"... ",$string); 

希望帮助:)

编辑:其实应该使用\s而不是空间,这将匹配任何空白字符。

+0

这找到> 10个字符,但不截断/追加。我正在寻找的东西是需要的:abcdefghijklmnop - > abcdefghij ... – lcdservices

+0

@布莱恩编辑,''乔布jopjopjopjopjop joop“'返回'joop jopjopjopj ... joop'现在:) – CookieMonster

+0

更接近 - 我越来越一个奇怪的地方,它只能代替字符串后面是换行符。当它被替换时,它将删除换行符。所以: longwordlongword longwordlongword - > longwordlo ... longwordlo ... – lcdservices

2

我想这个正则表达式是有用的。 我使用php 5.3.6进行测试,并且工作正常。

$pattern = "/(\\b\\w{10})\\w+\\b/"; 
echo preg_replace($pattern, "$1...", "pequeno palavramedia palavrabemgrandemesmo\n"); 

哪里是{10}你应该允许的最大大小无需更换更换。如果你想要最大字数N,你应该使用{N-3},因为点的长度。

它应该对大字符串运行正常,因为它描述了一种常规语言,运行时间应该是O(n)。当然,这取决于正则表达式的实现。