2010-04-16 6 views
0

Vous cherchez un moyen de combiner deux expressions régulières. Un pour attraper les URLs et l'autre pour s'assurer saute le texte dans les balises html. Voir le texte d'exemple ci-dessous des fonctions.RegEx pour ignorer/ignorer tout dans les balises html

Besoin de transmettre un bloc de texte de nouvelles et de mettre en forme du texte en enveloppant des URL et des adresses e-mail dans des balises html afin que les utilisateurs n'aient pas à le faire. Le code ci-dessous fonctionne très bien jusqu'à ce qu'il y ait déjà des balises html dans le texte. Dans ce cas, il double les balises html.

Il y a beaucoup d'exemples pour enlever le HTML, mais je veux juste l'ignorer puisque l'URL est déjà liée. Aussi - s'il y a un plus facile était d'accomplir cela, avec ou sans Regex, s'il vous plaît faites le moi savoir. aucune de mes tentatives pour combiner Regexs ont fonctionné.

codage dans ASP.NET VB mais prendra n'importe quel exemple/direction réalisable.

Merci!

Fonctions ===== =============

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|\[email protected])\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 

===== Exemple de texte =============
Ce serait le paramètre inText.

Au milieu de la course, nous voyons un < a href = "http://www.skipthis.com" target = "new" > Passer cela aussi </a >. Mais parfois, nous allons ici [insérer le point www dot link dot com normale]. Si vous souhaitez vous joindre à nous, contactez Bill Smith à [email protected] Merci!

Désolé, le débordement de pile ne permettra pas l'ajout de plusieurs hyperliens.

===== Fin Exemple de texte =============

Répondre

2

En premier lieu, check out this link. Ensuite, consultez le HTML Agility Pack. Vous vous épargnerez des années de maux de tête en ne parsant pas HTML avec des expressions régulières.

+0

merci .. Toujours LOL sur l'extrémiste regex. Ha! maintenant le pack d'agilité html. –

+0

HTML Agility Pack semble être tout "hors du web". Va-t-il s'attaquer au texte dans une zone de texte. c'est-à-dire, lier des données à mesure qu'elles sont lues à partir d'une base de données à l'écran? –

Questions connexes