Как включить дефис в гиперссылку Regex? - PullRequest
3 голосов
/ 13 июня 2010

Я пытаюсь найти ссылки во введенном пользователем тексте и автоматически преобразовать их в ссылку.

Я использую текущий Regex, как показано ниже, что полезно для поиска гиперссылок из текста.

Regex regexResolveUrl = new Regex("((http://|www\\.)([A-Z0-9.-:]{1,})\\.[0-9A-Z?;~&#=\\-_\\./]{2,})", RegexOptions.Compiled | RegexOptions.IgnoreCase);

Он работает хорошо почти для всех ссылок, с которыми я сталкивался, но он создает проблему, когда я хочу обнаружить ссылки с помощью hypen.

, т.е. www.abc-xyz.com не будет работать, с приведенным выше регулярным выражением,кто-нибудь может мне помочь с этим?

Ответы [ 3 ]

8 голосов
/ 13 июня 2010

Если вы хотите, чтобы - означало черту буквально в определении класса символов, вам нужно поставить его как последний (или первый) символ.Так [abc-] - это класс символов, содержащий 4 символа: a, b, c, -.С другой стороны, [ab-c] содержит только 3 символа, не включая -, потому что - является определением диапазона.

Итак, что-то вроде этого (из вашего шаблона):

[A-Z0-9.-:]

Определяет 3 диапазона: от A до Z, от 0 до 9 и от . (ASCII 46) до : (ASCII 58).Вместо этого вы хотите:

[A-Z0-9.:-]

Ссылки


Примечаниепри повторении

Я заметил, что вы использовали {1,} в своем шаблоне для обозначения "один или более из".

.NET регулярные выражения (как и большинство других разновидностей) поддерживают следующие сокращения:

  • ?: "ноль или один" {0,1}
  • *: "ноль или больше" {0,}
  • +: «один или более» {1,}

Они могут потребовать некоторого привыкания, но они также довольно стандартны.

Ссылки

Смежные вопросы


Примечание к строковым литералам в кавычках C # @

В то время как удвоение косых черт в строковых литералах для регулярных выражений является нормой внапример, Java (по необходимости), в C # вы действуетеобычно есть возможность использовать @ строковые литералы в кавычках.

То есть эти пары строк идентичны:

"(http://|www\\.)"
@"(http://|www\.)"

"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"

Использование @ может привести к более читаемым шаблонам регулярных выраженийпотому что буквальная косая черта не должна быть удвоена (хотя, с другой стороны, двойная кавычка теперь, в свою очередь, должна быть удвоена).

Ссылки

2 голосов
/ 13 июня 2010

Избегайте дефиса:

 Regex("((http://|www\\.)([A-Z0-9.\-:]{1,})\\.[0-9A-Z?;~&#=\\-_\\./]{2,})", RegexOptions.Compiled | RegexOptions.IgnoreCase);
2 голосов
/ 13 июня 2010

Добавьте дефис в качестве первого или последнего символа в классе символов.

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