Соответствие свободно сформированным URL с помощью регулярных выражений и PHP? - PullRequest
1 голос
/ 14 октября 2010

Я пытаюсь определить URL в наборе текста.Однако я хотел бы иметь возможность идентифицировать плохо сформированные URL, такие как:

example.com
www.example.com

Я не очень хорош в регулярных выражениях :(

Я нашел шаблон ниже, но, к сожалению, он требует схемы.

/(([[:alnum:]]+:\/\/)|www\.)([^[:space:]]*)([[:alnum:]#?\/&=])/i

Можно ли сопоставить целую строку (без пробелов), которая включает в себя .com или .net или .org и т. Д.?

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 октября 2010
~(?:https?://)?(?:[-\w]+\.)+[a-z]{2,6}[^\s]*~

Regex @ Rubular

0 голосов
/ 14 октября 2010

Соответствует только любой строке символов, которые не содержат пробелов и заканчиваются на ".com", ".net" или ".org":

/[^\s]+\.(?:com|net|org)\b/i

Пояснение:

  • / = начало регулярного выражения
  • [^\s] = Не (^) символ пробела (\s)
  • + = Один или несколько из предыдущего набора (непробельные символы)
  • \. = Точка. Точки в RegExps являются специальными символами, в противном случае
  • (?: ... ) = группа, но не та, которая будет сохранена
  • com|net|org = com ИЛИ net ИЛИ org (Вы можете добавить больше здесь, разделив "|")
  • \b = Граница слова - конец слова
  • / = Конец регулярного выражения (кроме необязательных флагов)
  • i = нечувствителен к регистру

Расширение ответа

По запросу OP ниже приводится (грубый) RegExp, который должен соответствовать URL для домена, заканчивающегося указанными строками, и с одной или несколькими парами ключ = значение в строке запроса.

/[^\s]+\.(?:com|net|org)[^\s]+\?[^\s]+=[^\s]+(?:\&?[^\s]+=[^\s]+)*\b/i
  • / = начало регулярного выражения
  • [^\s]+\.(?:com|net|org) = Как и раньше
  • [^\?]+ = Один или несколько символов без знака вопроса (это может быть любая папка или имя файла). Опять же, у вопросительного знака есть \, прежде чем он будет рассматриваться как нормальный символ, так как в противном случае он имеет особое значение здесь
  • \? = Вопросительный знак
  • [^\s]+\=[^\s]+ = Одно или несколько непробельных символов, затем знак равенства, затем одно или несколько непробельных символов
  • (?:\&?[^\s]+=[^\s]+)* = Нет или более наборов амперсанда &, затем еще одно или несколько непробельных символов, знак равенства и одно или несколько непробельных символов
  • \b = Конец строки
  • / = Конец регулярного выражения
  • i = Нечувствителен к регистру

ПРИМЕЧАНИЕ: Это не ищет полностью действительные URL-адреса и не учитывает множество кодов стран (например, «.com.au» для Австралии) или других доменов верхнего уровня (например, .edu 'и т. д.) Но он будет соответствовать приведенной строке примера: twitter.com / example? var = true

0 голосов
/ 14 октября 2010

Риск ложных срабатываний есть, но минимальный.Так что вы действительно можете использовать что-то вроде:

/\b(([-\w]{2,}\.)+(com|net|org|info)|www(\.\w{3,})+\.\w{2,6})\b/i

Первая половина предназначена для обычных доменов .com / .net, вторая соответствует всему с www.префикс.Сложнее, если вы хотите обнаружить эти доменные имена в дополнение к полному http: // urls.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...