RegEx, чтобы игнорировать / пропустить все в HTML-теги - PullRequest
0 голосов
/ 16 апреля 2010

Ищите способ объединить два регулярных выражения. Один для перехвата 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. Спасибо!

извините, переполнение стека не позволит добавить несколько гиперссылок.

===== Конец образца текста =============

1 Ответ

2 голосов
/ 16 апреля 2010

Сначала проверить эту ссылку .

Тогда ознакомьтесь с HTML Agility Pack . Вы избавите себя от головной боли, не разбирая HTML с помощью регулярных выражений.

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