Используя preg_replace (), как заменить совпадающий текст, если он короче 10 символов? - PullRequest
0 голосов
/ 07 апреля 2011
$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 ]

3 голосов
/ 07 апреля 2011

Для соответствия минимальной длине вы можете заменить * числовым квантификатором {10,}.Но вы хотели наоборот, поэтому это будет делать:

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

См. http://www.regular -expressions.info / repeat.html в разделе Ограничение повторений .

2 голосов
/ 07 апреля 2011

Пожалуйста, не используйте модификатор 'U'!(это плохой стиль, никогда не нужно и служит только для того, чтобы запутать).Вместо этого применять универсальный?Ленивый модификатор для любых квантификаторов, которые вы хотите быть ленивыми.Точка тоже редко нужна.Это, вероятно, то, что вы ищете:

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

1 голос
/ 07 апреля 2011

Вы можете использовать preg_match с вашим регулярным выражением, затем использовать функцию strlen() для сопоставленной строки.

Если длина совпадающей строки> 10, тогда используйте str_replace с сопоставленной строкой в ​​качестве первого параметра.

...