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


Using preg_replace(), how to only replace matched text if it is shorter than 10 characters?

$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个字符,不要替换。

我该怎么做呢?谢谢。

要匹配最小长度,可以将*替换为数字量词{10,}。但是你想要相反的,所以这样做:

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

参见http://www.regular-expressions.info/repeat.html 限制重复

请不要使用" U "修饰语!(这是一种糟糕的风格,从来没有必要,只会让人困惑)。相反,应用普遍的?惰性修饰符到任何您想要惰性的量词。点也很少需要。这可能是你想要的:

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

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

如果匹配的字符串长度> 10,则使用str_replace作为第一个参数