У меня есть это выражение, чтобы определить URL, и превратить их в ссылки:preg_replace для URL, добавляющих с запятой после специальных символов
$string = preg_replace("/(\A|[^=\]'\"a-zA-Z0-9])((http|ftp|https|ftps|irc):\/\/[^<>\s()]+)/i", "\\1<a href=\"\\2\">\\2</a>", $string);
Он отлично работает, кроме случаев, когда есть знаки препинания в конце URL-адреса (например, когда URL-адрес находится в конце предложения). Он обрабатывает знаки препинания, как часть URL-адреса, что, очевидно, означает, что ссылка не будет работать.
Чтобы исправить это, я добавил границу слова (\ b) в конце выражения. Он отлично работает - периоды, запятые и т. Д. Больше не добавляются в ссылку! За исключением трех символов &' и " Те не только получить в сочетании с URL, но заменить строку добавляет точку с запятой. Например:..
- [ааа] .com
- [БББ] .com,
[ссс] .com?
[ххх] .com &
- [ууу] .com»
- [ZZZ] .com»
стать
- [ааа] .com.
- [В] .com,
[ссс] .com?
[xxx] .com &;
- [yyy] .com ';
- [ZZZ] .com»;.
(. Выделенная часть представляет собой то, что теперь linkified - точка с запятой вставляется как обычный текст) Периоды, запятые и другие puctuation успешно игнорировали Амперсанды и цитаты метки включены как часть ссылки, а точка с запятой в виде простого текста вставлена в конце, даже если она не соответствует совпадающему тексту.
Я искал и искал, почему, и я не могу найти все, что объясняет это. Я протестировал выражение на сайтах тегов preg_replace, и он не вызывают любые про там, на самом деле, он работает точно так, как должен, только для соответствия URL, а не символа конца. Вероятно, это что-то простое, что я не знаю о regex или preg_replace, но я не знаю, как успешно игнорировать все знаки пунктуации/специальные символы в конце URL-адреса и не иметь какой-то странной вставки точки с запятой после &, , или ".
работает для меня: http://codepad.viper-7.com/69euuK без дополнительной точки с запятой, пари, это еще где в коде –
Can вы предоставляете образец того, что вы пытаетесь проанализировать? –