Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.10.2017, 02:06
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 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
Ответить с цитированием
  #2 (permalink)  
Старый 27.10.2017, 03:16
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Не находит - оставляет без изменений.
Ответить с цитированием
  #3 (permalink)  
Старый 27.10.2017, 08:41
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от 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));
Ответить с цитированием
  #4 (permalink)  
Старый 27.10.2017, 08:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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);
Ответить с цитированием
  #5 (permalink)  
Старый 27.10.2017, 11:40
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Я понял, спасибо.
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2017, 02:01
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 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** *');
Ответить с цитированием
  #7 (permalink)  
Старый 02.11.2017, 03:04
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Потому что в строке между одинарными звёздочками есть символы, не подпадающие под правило "[a-zA-Z\s\.]+".

Код:
php -r 'echo preg_replace("#(?<!\*)\*(([a-zA-Z\s\.]|\*\*+)+)\*(?!\*)#i", "<em>$1</em>", "*italic text **with bold** *"), "\n";'
Ответить с цитированием
  #8 (permalink)  
Старый 02.11.2017, 15:16
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 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 - плохо работает
Ответить с цитированием
  #9 (permalink)  
Старый 02.11.2017, 15:29
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от DivMan
я в условие написал {1,} это значит, если повторяется больше одного раза
Можно тогда указать "+"...
Ответить с цитированием
  #10 (permalink)  
Старый 02.11.2017, 15:38
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Заменил {1,} на + и не работает
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как обернуть слова в тексте в тег strong prog77 Javascript под браузер 10 17.07.2017 14:43
вывести самые короткие слова строки sucrew Общие вопросы Javascript 2 14.06.2017 06:16
Выводим слова в данной области из массива Black_Star jQuery 15 03.01.2017 13:07
Выбор случайного слова из списка alerzo Элементы интерфейса 3 19.04.2014 15:46
необходими разделить строку на слова и положить слова в массив при помощи цикла for oneee Общие вопросы Javascript 5 05.09.2012 14:30