Я пытаюсь идентифицировать URL-адреса в наборе текста. Однако я хотел бы иметь возможность идентифицировать слабо сформированные URL-адреса, такие как:
example.com
www.example.com
Я не очень хорошо разбираюсь в regex 🙁
Я нашел ниже, но, к сожалению, это требует схемы.
/(([[:alnum:]]+:\/\/)|www\.)([^[:space:]]*)([[:alnum:]#?\/&=])/i
Можно ли совместить целую строку (без пробелов), которая включает в себя .com или .net или .org и т. Д.?
благодаря
Чтобы соответствовать только любой строке символов, которые не содержат пробела и конца в «.com», «.net» или «.org»:
/[^\s]+\.(?:com|net|org)\b/i
Объяснение:
/
= Начало регулярного выражения [^\s]
= Not ( ^
) символ пробела ( \s
) +
= Один или несколько из предыдущих наборов (символы без пробелов) \.
= Точка. Точки в RegExps – это специальные символы, иначе (?: ... )
= группа, но не одна для хранения com|net|org
= com
ИЛИ net
OR org
(здесь вы можете добавить больше, разделяя «|») \b
= граница слова – конец слова /
= Конец регулярного выражения (кроме необязательных флагов) i
= Нечувствительность к случаю Продление ответа
По запросу OP ниже приведен пример (грубая) RegExp, которая должна соответствовать URL-адресу домена, заканчивающегося указанными строками, и одной или несколькими парами ключ = значение в строке запроса.
/[^\s]+\.(?:com|net|org)[^\s]+\?[^\s]+=[^\s]+(?:\&?[^\s]+=[^\s]+)*\b/i
/
= Начало регулярного выражения [^\s]+\.(?:com|net|org)
= Как и раньше [^\?]+
= Один или несколько символов без знака (это будет любая папка или имена файлов). Опять же, Questionmark имеет \
перед тем, чтобы он рассматривался как нормальный символ, поскольку в противном случае он имеет особое значение здесь \?
= A Questionmark [^\s]+\=[^\s]+
= одно или несколько небелых пространств, затем знак равенства, затем одно или несколько не-белых пространств (?:\&?[^\s]+=[^\s]+)*
= Нет или больше наборов амперсанда &
, затем еще одно или несколько небелых пространств, знак равенства и один или несколько не- пробельные символы \b
= Конец строки /
= Конец регулярного выражения i
= Нечувствительность к случаю ПРИМЕЧАНИЕ. Это не ищет полностью допустимые URL-адреса и не позволяет использовать множество кодов стран (например, «.com.au» для Австралии) или другие домены верхнего уровня (например, «.edu» и т. Д.). Но, он будет соответствовать приведенной строке примера, twitter.com/example?var=true
Риск ложных срабатываний есть, но минимальный. Поэтому вы действительно можете использовать что-то вроде:
/\b(([-\w]{2,}\.)+(com|net|org|info)|www(\.\w{3,})+\.\w{2,6})\b/i
Первая половина для обычных доменов .com / .net, вторая соответствует всем с www. префикс. Это сложнее, если вы хотите обнаружить эти доменные имена в дополнение к полным http: // urls.
~(?:https?://)?(?:[-\w]+\.)+[az]{2,6}[^\s]*~
Regex @ Rubular