Ищите способ объединить два регулярных выражения. Один для перехвата URL-адресов, а другой - для пропуска текста в HTML-тегах. Смотрите образец текста ниже функций.
Необходимо передать блок текста новостей и отформатировать текст, поместив URL-адреса и адреса электронной почты в теги html, чтобы пользователям не приходилось это делать. Приведенный ниже код прекрасно работает, пока в тексте уже нет HTML-тегов. В этом случае он удваивает теги html.
Существует множество примеров для удаления html, но я хочу просто проигнорировать это, так как URL уже связан. Кроме того - если есть легче было сделать это, с Regex или без, пожалуйста, дайте мне знать. ни одна из моих попыток объединить регулярные выражения не сработала.
кодирование в ASP.NET VB, но примет любой работающий пример / направление.
Спасибо!
===== Функции =============
Public Shared Function InsertHyperlinks(ByVal inText As String) As String
Dim strBuf As String
Dim objMatches As Object
Dim iStart, iEnd As Integer
strBuf = ""
iStart = 1
iEnd = 1
Dim strRegUrlEmail As String = "\b(www|http|\S+@)\S+\b"
'RegEx to find urls and email addresses
Dim objRegExp As New Regex(strRegUrlEmail, RegexOptions.IgnoreCase)
'Match URLs and emails
Dim MatchList As MatchCollection = objRegExp.Matches(inText)
If MatchList.Count <> 0 Then
objMatches = objRegExp.Matches(inText)
For Each Match In MatchList
iEnd = Match.Index
strBuf = strBuf & Mid(inText, iStart, iEnd - iStart + 1)
If InStr(1, Match.Value, "@") Then
strBuf = strBuf & HrefGet(Match.Value, "EMAIL", "_BLANK")
Else
strBuf = strBuf & HrefGet(Match.Value, "WEB", "_BLANK")
End If
iStart = iEnd + Match.Length + 1
Next
strBuf = strBuf & Mid(inText, iStart)
InsertHyperlinks = strBuf
Else
'No hyperlinks to replace
InsertHyperlinks = inText
End If
End Function
Shared Function HrefGet(ByVal url As String, ByVal urlType As String, ByVal Target As String) As String
Dim strBuf As String
strBuf = "<a href="""
If UCase(urlType) = "WEB" Then
If LCase(Left(url, 3)) = "www" Then
strBuf = "<a href=""http://" & url & """ Target=""" & _
Target & """>" & url & "</a>"
Else
strBuf = "<a href=""" & url & """ Target=""" & _
Target & """>" & url & "</a>"
End If
ElseIf UCase(urlType) = "EMAIL" Then
strBuf = "<a href=""mailto:" & url & """ Target=""" & _
Target & """>" & url & "</a>"
End If
HrefGet = strBuf
End Function
===== Образец текста =============
Это будет параметр inText.
В середине пути мы видим Пропустить это тоже . Но иногда мы идем сюда [вставьте нормальный www точка ссылка точка ком]. Если вы хотите присоединиться к нам, свяжитесь с Биллом Смитом по адресу Tester@gmail.com. Спасибо!
извините, переполнение стека не позволит добавить несколько гиперссылок.
===== Конец образца текста =============