2016-02-09 2 views
1

У меня есть некоторый код, который распознает URL в строку, и преобразует его в гиперссылку:Regex на URL строки терпит неудачу, когда «(» или «)» присутствует

MyString = Regex.Replace(MyString, 
         "(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])", 
         Function(match As Match) String.Format("<a href=""{0}"">{0}</a>", match.ToString())) 

К сожалению, это завершающий матч рано, если строка содержит либо (, либо ) символов. Например ...

http://my.intranet/CustomerServices/Internal/Staff(Admin)ProcedureChanges.asp 

... заменяется

<a href="http://my.intranet/CustomerServices/Internal/Staff">http://my.intranet/CustomerServices/Internal/Staff</a>(Admin)ProcedureChanges.asp 

Может кто-нибудь, пожалуйста, изменить RegEx, чтобы эти символы должны быть включены в URL,? Спасибо.

+2

Try 'HTTPS: // [\ ш \ -_] + (. \ [\ Ш \ -_] +) + ([\ ш \ -, @^=% &.? :/~() + #] * [\ w \ - @?^=% &/~ + #]) '. –

+0

Кажется работать - спасибо. Если вы можете опубликовать ответ, я соглашусь и закрываю. – EvilDr

ответ

1

Я предлагаю добавить в ( и ) символы в третьей группе (и контракт первым, кто только https?):

https?://[\w\-_]+(\.[\w\-_]+)+([\w\-.,@?^=%&amp;:/~()+#]*[\w\[email protected]?^=%&amp;/~+#]) 

Посмотреть demo

Обратите внимание, что вам не нужно, чтобы избежать + и . внутри знак класс.

enter image description here

+1

Отлично, спасибо большое за объяснение. – EvilDr

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