
27.10.2017, 02:06
|
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
|
Граница слова preg_replace
Не понимаю, почему находит простое слово, если я указал границу?
$str = 'http://site.ru, http://site.com, https://site.info sgdf';
echo preg_replace('#\b(https?://)([a-z0-9-]+)\.([a-z]{2,})\b#', '<a href="$1$2.$3">$2.$3</a>', $str);
Должно вывести site.ru, site.com, site.info
а выводит site.ru, site.com, site.info sgdf
|
|

27.10.2017, 03:16
|
 |
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 499
|
|
|
Не находит - оставляет без изменений.
|
|

27.10.2017, 08:41
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,304
|
|
|
Сообщение от DivMan
|
|
Должно вывести site.ru, site.com, site.info
|
Тогда, как вариант
var str='http://site.ru, [url]http://site.com[/url], [url]https://site.info[/url] sgdf, https://test.ru';
alert(str.match(/(https?:\/\/)(.+?)\.(.+?)(?=\s|,|$)/g));
|
|

27.10.2017, 08:56
|
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
ksa,
это же сервер и он прекрасно справится, в отличии от JS в этом плане у него куда большие возможности. ) Просто в данном случае граница слова совсем не требуется.
$str = 'http://site.ru, http://site.com, https://site.info sgdf';
echo preg_replace('~(https?://)([^\s,]+)~', '<a href="$1$2">$2</a>', $str);
|
|

27.10.2017, 11:40
|
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
|
Я понял, спасибо.
|
|

02.11.2017, 02:01
|
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
Я сделал, что бы текст менялся, если есть одиночные звёздочки, в первой строчке, работает, как надо, а во второй работает неправильно, том должна быть вся строка курсивом, почему она не закурсивилась?
echo preg_replace('#(?<!\*)\*([a-zA-Z\s\.]+)\*(?!\*)#i', '<em>$1</em>', '**bold text with *italic* **');
echo '<br>';
echo preg_replace('#(?<!\*)\*([a-zA-Z\s\.]+)\*(?!\*)#i', '<em>$1</em>', '*italic text **with bold** *');
|
|

02.11.2017, 03:04
|
 |
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 499
|
|
Потому что в строке между одинарными звёздочками есть символы, не подпадающие под правило "[a-zA-Z\s\.]+".
|
Код:
|
php -r 'echo preg_replace("#(?<!\*)\*(([a-zA-Z\s\.]|\*\*+)+)\*(?!\*)#i", "<em>$1</em>", "*italic text **with bold** *"), "\n";' |
|
|

02.11.2017, 15:16
|
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
Не понимаю, я в условие написал {1,} это значит, если повторяется больше одного раза, то это всё удалить, но почему не во всех случаях удаляет?
echo preg_replace('#([\w]+)\s\1{1,}#', '$1', 'hello my my my my my world')
//hello world world - работает
//hello world world world - не работает
//hello world world world world - не работает
//hello hello world - работает
//hello hello hello hello world - плохо работает
//hello my my world - работает
//hello my my my world - плохо работает
|
|

02.11.2017, 15:29
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,304
|
|
|
Сообщение от DivMan
|
|
я в условие написал {1,} это значит, если повторяется больше одного раза
|
Можно тогда указать "+"... 
|
|

02.11.2017, 15:38
|
|
Профессор
|
|
Регистрация: 08.03.2016
Сообщений: 429
|
|
|
Заменил {1,} на + и не работает
|
|
|
|