Regex для URL, который не принимает "\ n" - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь заменить URL в строке на регулярное выражение.Проблема в том, что строка может содержать «\ n».Например,

http://www.google.com\n

И \ n - это новая строка.Строка собрана из текстовой области.Может кто-нибудь, пожалуйста, помогите мне найти регулярное выражение, которое соответствует URL-адресу и знает, что \ n не является частью URL-адреса.

Edit,

Один из попыток, которые я пробовал,

@"(?<!<\s*(?:a|img)\b[^<]*)(\b(?:(?:http|https|ftp|file)://|www\.)[^ |\\]+\b)"

r.Replace(text, "<a href=\"$1\" target=\"&#95;blank\">$1</a>")

r = Мой объект Regex и текст - это ввод, в котором я хочу заменить URL гиперссылкой.

Ответы [ 4 ]

1 голос
/ 27 февраля 2011

Как насчет простого добавления \ n к существующему регулярному выражению?

@"(?<!<\s*(?:a|img)\b[^<]*)(\b(?:(?:http|https|ftp|file)://|www\.)[^ |\\\n]+\b)"

?

0 голосов
/ 27 февраля 2011

Почему бы не написать правильное регулярное выражение, построенное на основе спецификаций? Возьмите rfc и создайте регулярное выражение, как они создают определение в RFC:

http://www.ietf.org/rfc/rfc1738.txt

Итак, как начать:

схема = @ "http | https" ... специфичная для схемы = "//" + user + ":" + пароль "+" @ "+ host +": "port +" / "+ url-path url = схема + ":" + схема

Конечно, это много работы, но вы уверены, что не пропустите ни одного дела. И очень важно очень тщательно подумать о том, какие данные принимать (поскольку ваша текущая версия, похоже, также подвержена XSS (http://jehiah.cz/a/xss-stealing-cookies-101)

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

0 голосов
/ 27 февраля 2011

Я нашел предложение по https://stackoverflow.com/users/53104/smazy

Если вы хотите найти соответствие до самого конца строки и игнорировать любые разрывы строк, используйте \ z

Regex regex = new Regex (@ "^ [a-z0-9] + \ z", RegexOptions.Multiline);

Это касается как MutliLine, так и SingleLine, это не имеет значения.

0 голосов
/ 25 февраля 2011

Вы можете попробовать что-то вроде ...

(http://)|(https://)?(www.)(\w)+(.)(\w)+

, так как \ недопустимо для символа слова, оно перестает совпадать с \ n.

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