使用preg_replace(),如果短于10个字符,如何只替换匹配的文本?

时间:2011-04-07 16:16:02

标签: php regex string preg-replace

$str = "(search: kewyord)";
$str = preg_replace("'\(search: (.*)\)'Ui","(search: <a href=\"search.php?q=\\1\"><b>\\1</b></a>)",$str);
//result->>
$str =  (search: <a href=\"search.php?q=keyword\">kewyord</a>)

我想改变为

如果关键字超过10个字符,请不要替换它。

我该怎么做?感谢。

3 个答案:

答案 0 :(得分:3)

要使其与最小长度匹配,您可以使用数字量词*替换{10,}。但你想要反对,所以这样做:

 preg_replace("'\(search: (.{1,9})\)'Ui",

请参阅限制重复下的http://www.regular-expressions.info/repeat.html

答案 1 :(得分:2)

请不要使用'U'修饰符! (这是不好的风格,从来没有必要,只是为了混淆)。相反,应用通用?对你想要懒惰的任何量词的懒惰修饰符。这个点也很少需要。这可能就是你想要的:

'/\(search:\s+([^)\s]{1,9})\)/i'

答案 2 :(得分:1)

您可以将preg_match与正则表达式一起使用,然后在匹配的字符串上使用strlen()函数。

如果匹配字符串的长度&gt; 10然后使用匹配字符串的str_replace作为第一个参数。