Я пытаюсь выполнить команду регулярного выражения для анализа входящих сообщений электронной почты, чтобы определить любые гиперссылки, которые были отправлены фальшивыми / фишинговыми сайтами, пытающимися использовать разные названия нашей компании. Наша компания является abcdomain. Критерии:

  1. Найти все гиперссылки (часть имени хоста), которые содержат название нашей компании 'abcdomain'
  2. Исключите все домены, которые мы зарегистрировали сами, т.е. myabcdomain.com, site.abcdomain.com, abcdomain.net и т.д.)

Мои регулярные выражения не сформированы хорошо и не работают при некоторых изменениях. Проблема, вероятно, связана с тем, как я исключаю. Сначала я действительно пытался исключить «abcdomain.com», но регулярное выражение, похоже, не сработало.

  • Запрос: (http[s]?|ftp)\S*?(abcdomain|myabcdomain)(?!\.com)
  • Строка: http://www.abcdomain.com/logo/email/abcdomain-email-logo.png
  • Результат: это должно быть исключено, но запрос попадает на второй abcdomain


  • Запрос: (http[s]?|ftp):\/\/([\dA-Za-z\.]*)(abcdomain|myabcdomain)(?!.com|..net)

  • Строка: http://www.fakeabcdomain.com
  • Результат: это должно быть включено, но мое исключение смотрит только после результата попадания)

1 ответ1

0

Этот работает для ваших тестовых случаев:

(?:ht|f)tps?://(?=[^/]*(?:myabcdomain|abcabcdomain|abcdomain(?:\.zendesk)?))(?!(?:\w+\.)?(?:myabcdomain|abcabcdomain|abcdomain(?:\.zendesk)?)\.com)\S+

Объяснение:

(?:ht|f)tps?://         : protocol
(?=                     : positive lookahead, make sure we have after
  [^/]*                 : 0 or more non slash
  (?:                   : start non capture group
    myabcdomain         : literally
  |                     : OR
    abcabcdomain        : literally
  |                     : OR
    abcdomain           : literally
    (?:\.zendesk)?      : followed with optional
  )                     : end group
)                       : end lookahead
(?!                     : negative lookahead, make sure we don't a=have after
  (?:\w+\.)?            : optional, 1 or more word character and a dot
  (?:                   : start non capture group
    myabcdomain         : literally
  |                     : OR
    abcabcdomain        : literally
  |                     : OR
    abcdomain           : literally
    (?:\.zendesk)?      : followed with optional
  )                     : end group
  \.com                 : literally
)                       : end lookahead
\S+                     : 1 or more any character that is not a space

Это соответствует:

<a href="http://abcdomain.products.com.vbs">
<a href="https://abcdomainproducts.com">
<a href="http://products.abcdomain.products.net">
<a href="https://products.abcdomainproducts.com/test">
<a href="http://fakeabcdomain.products.com.vbs">
<a href="http://myabcdomain.products.com.vbs">
<a href="http://fakeabcdomain.com">

И не совпадает:

<a href="http://products.myabcdomain.com/help">
<a href="http://abcdomain.zendesk.com/help">
<a href="http://myabcdomain.com/help">
<a href="http://abcdomain.com/help">
<a href="http://products.abcabcdomain.com">

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .