Не получите URL содержит: "Тогл" [Regex] - PullRequest
0 голосов
/ 31 августа 2011

У меня есть отличный URL-адрес, перехватывающий Regex, но у меня проблема ... Я не хочу получать URL-адреса от togl.me ... Мой Regexp:

(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))

И этошаблон регулярного выражения:

(?xi)
\b
(                       # Capture 1: entire matched URL
  (?:
    https?://               # http or https protocol
    |                       #   or
    www\d{0,3}[.]           # "www.", "www1.", "www2." … "www999."
    |                           #   or
    [a-z0-9.\-]+[.][a-z]{2,4}/  # looks like domain name followed by a slash
  )
  (?:                       # One or more:
    [^\s()<>]+                  # Run of non-space, non-()<>
    |                           #   or
    \(([^\s()<>]+|(\([^\s()<>]+\)))*\)  # balanced parens, up to 2 levels
  )+
  (?:                       # End with:
    \(([^\s()<>]+|(\([^\s()<>]+\)))*\)  # balanced parens, up to 2 levels
    |                               #   or
    [^\s`!()\[\]{};:'".,<>?«»“”‘’]        # not a space or one of these punct chars
  )
)

Не перехватывать URL-адреса из http://togl.me.Я могу проверить доменное имя с parse_url после перехвата URL, но зачем это нужно?

1 Ответ

1 голос
/ 31 августа 2011

После сопоставления домена вы можете оглянуться назад, чтобы убедиться, что это не togl.me.

[a-z0-9.\-]+[.][a-z]{2,4}(?<!/togl\.me)/

Редактировать: , поскольку домен может быть сопоставлен в других местах, отличных от тех, в которых говорится в комментариях, давайте перенесем проверку на togl.me.

…
    [a-z0-9.\-]+[.][a-z]{2,4}/  # looks like domain name followed by a slash
  )
  (?<!togl\.me/) 
  (?!togl\.me)
  (?:                       # One or more:
    [^\s()<>]+
…

Дополнительная справка: http://www.regular -expressions.info / lookaround.html

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