Regex для получения домена URL Excel VB - PullRequest
0 голосов
/ 13 марта 2011

У меня есть файл excel с URL-адресами типа http://test.example.com/anything...

я хочу сделать это http://test.example.com

знает ли кто-нибудь регулярное выражение, которое я должен использовать?(я получил макрос в VB для замены, мне просто нужно регулярное выражение)

спасибо

Public Function SearchNReplace1(Pattern1 As String, _
   Pattern2 As String, Replacestring As String, _
   TestString As String)
   Dim reg As New RegExp

   reg.IgnoreCase = True
   reg.MultiLine = False
   reg.Pattern = Pattern1
   If reg.Test(TestString) Then
     reg.Pattern = Pattern2
     SearchNReplace1 = reg.Replace(TestString, Replacestring)
   Else
     SearchNReplace1 = TestString
   End If
End Function

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

от: ([a-z]+://[a-z0-9.-]+)[^ ]* до: \1

Это будет есть все после имени домена, пока не встретится пробел или конец строки. Пожалуйста, дайте больше подробностей, если этот вам не подходит.

Если вам нужны адреса ipv6 в качестве хостов, вы должны также разрешить использование символа []::

от: ([a-z]+://[a-z0-9.\[\]:-]+)[^ ]* до: \1

0 голосов
/ 13 марта 2011

RFC-3986 Приложение B. дает нам это регулярное выражение для декомпозиции универсального URI:

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

Поскольку вы заинтересованы в том, чтобы собрать все до пути, вотэквивалентное регулярное выражение, которое должно работать довольно хорошо (в синтаксисе PHP, чтобы разрешить комментарии):

$re = '%# Match URI and capture scheme and path in $1.
^                  # Anchor to beginning of string.
(                  # $1: Everything up to path.
  (?: [^:/?#]+:)?  # Optional scheme.
  (?://[^/?#]* )?  # Optional authority.
)                  # End $1: Everything up to path.
        [^?#]*     # Required path.
(?:\?    [^#]* )?  # Optional query.
(?:\#       .* )?  # Optional fragment.
$                  # Anchor to end of string.
%x';

А вот точно такое же регулярное выражение в краткой форме, которое должно работать в VB:

myRegExp.Pattern = "^((?:[^:/?#]+:)?(?://[^/?#]*)?)[^?#]*(?:\?[^#]*)?(?:#.*)?$"

Это регулярное выражение не проверяет URI, оно просто разбивает его на различные компоненты и выделяет нужную часть в группу захвата 1. Обратите внимание, что каждый компонент, кроме пути, является необязательным (и сам путь может быть пустым).).Другими словами, пустая строка является допустимым URI!

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