Регулярное выражение для парсинга ссылок от веб-страницы?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

16
задан eLRuLL 16 December 2017 в 22:04
поделиться

8 ответов

((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)

я взял это от regexlib.com

[примечание редактора: эти {1} не имеет никакой реальной функции в этом regex; см. это сообщение ]

12
ответ дан 30 November 2019 в 21:03
поделиться

из библиотеки RegexBuddy:

URL: Найдите в полном тексте

, класс последнего символа удостоверяется, что, если URL является частью некоторого текста, пунктуация, такая как запятая или точка после того, как URL не интерпретируется как часть URL.

\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]

8
ответ дан 30 November 2019 в 21:03
поделиться

Посмотрите на спецификацию URI. Это могло помочь Вам много. И насколько производительность идет, можно в значительной степени извлечь все ссылки HTTP в скромной веб-странице. Когда я говорю скромный, я определенно не имею в виду одну страницу все затрагивание руководства HTML как этот руководства ELisp. Также производительность является раздражительной темой. Мой совет состоял бы в том, чтобы измерить Ваш уровень и затем решить, собираетесь ли Вы извлечь все ссылки с помощью одного единственного regex или с несколькими более простыми regex выражениями.

http://gbiv.com/protocols/uri/rfc/rfc3986.html

2
ответ дан 30 November 2019 в 21:03
поделиться

С Пакет Гибкости HTML , можно использовать:

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
Response.Write(link["href"].Value);
}
doc.Save("file.htm");
4
ответ дан 30 November 2019 в 21:03
поделиться

Весь HTTP и MAILTO's

(["'])(mailto:|http:).*?\1

Все ссылки, включая относительные, которые называют href или src.

#Matches things in single or double quotes, but not the quotes themselves
(?<=(["']))((?<=href=['"])|(?<=src=['"])).*?(?=\1)

#Maches thing in either double or single quotes, including the quotes.
(["'])((?<=href=")|(?<=src=")).*?\1

второй только доберется, Вы связываете то использование двойные кавычки, как бы то ни было.

2
ответ дан 30 November 2019 в 21:03
поделиться

У меня нет времени, чтобы попытаться думать о regex, который, вероятно, не будет работать, но я хотел прокомментировать, что необходимо совершенно определенно разбить regex, по крайней мере, если это добирается до этот уровень уродства :

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
....*SNIP*....
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)

(это, предположительно, соответствует адресам электронной почты)

Редактирование: Я не могу даже соответствовать ему на одном сообщении, это настолько противно....

1
ответ дан 30 November 2019 в 21:03
поделиться

Это получит URL от всех теги, пока автор HTML использовал кавычки:

<a[^>]+href="([^"]+)"[^>]*>

я сделал пример здесь .

0
ответ дан 30 November 2019 в 21:03
поделиться

URL? Как в изображениях/сценариях/CSS/и т.д.?

%href="(.["]*)"%

0
ответ дан 30 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: