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 =============
merci .. Toujours LOL sur l'extrémiste regex. Ha! maintenant le pack d'agilité html. –
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? –