Я пытаюсь идентифицировать 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