---
title: "Hjälp med Regular Expression"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/51176-hjälp-med-regular-expression"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "edebro"
published: "2002-08-24T12:08:52.000Z"
updated: "2002-08-25T18:41:40.000Z"
replies: 8
views: 341
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/51176-hjälp-med-regular-expression"
---

# Hjälp med Regular Expression

## #1 — edebro, 2002-08-24T12:08Z

Jag har denna koden:

```
' funktionerna som ska fixa formateringen på texten och länkar
Function formatText(arg)
	Dim editText
				
	editText = Server.HTMLEncode(arg)
				
	If Len(editText) = 0 Then
		formatText = editText
		Exit Function
	End If
				
	Dim objRegExp
	Set objRegExp = New RegExp

	' länkarna, både www, [url]http://[/url] och e-mail länkar(@)
	Dim strBuf
	Dim objMatches, objMatch
	Dim Value, ReplaceValue, iStart, iEnd

	strBuf = ""
	iStart = 1
	iEnd = 1
			
	objRegExp.Pattern = "\b(www|[url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|\S+@)\S+\b"		' Sökmönster
	objRegExp.IgnoreCase = True											' Slå av Case Sensetive
	objRegExp.Global = True												' Så att den söker många gånger
	Set objMatches = objRegExp.Execute(editText)
	For Each objMatch in objMatches
		iEnd = objMatch.FirstIndex
		strBuf = strBuf & Mid(editText, iStart, iEnd-iStart+1)
		If InStr(1, objMatch.Value, "@") Then
		  strBuf = strBuf & GetHref(objMatch.Value, "EMAIL", "_blank")
		Else
		  strBuf = strBuf & GetHref(objMatch.Value, "WEB", "_blank")
		End If
		iStart = iEnd+objMatch.Length+1
	Next
	strBuf = strBuf & Mid(editText, iStart)
			
				
	formatText = strBuf
					
End Function

Function GetHref(url, urlType, Target)
	Dim strBuf

	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
				  
	GetHref = strBuf

End Function
```

Som du säkert förstår så översätter den text till länkar i t ex ett forum.
För tillfället länkar den även en sån här länk:
"den här sidan är brahttp://www.server.com"

Jag vill altså att den endast ska länka om tecknet **före** själva sökmöstret är ett radbryt eller mellanslag

Så här ser ju sökmönstret ut just nu:
objRegExp.Pattern = "\\b(www\|<http://>\|<https://>\|ftp://\|\\S+@)\\S+\\b"

**Den som löser detta får 100 kr**. Det lovar och svär jag på.

Oerhört tacksam för svar (jag har hållit på mer eller mindre med detta problem i några månader) :/

Permalänk: https://www.webforum.nu/p/51176

## #2 — edebro, 2002-08-24T12:11Z

Jag ser att ni på webForum har fått till detta på ett bra sätt. Någon administratör kanske kan bidra med sökmönstret som wF använder ;)

Permalänk: https://www.webforum.nu/p/762136

## #3 — edebro, 2002-08-24T17:06Z

Nån?

Permalänk: https://www.webforum.nu/p/762285

## #4 — Pace, 2002-08-24T17:11Z

```
(^|[^""])([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:|file://|[url]telnet://[/url]|[url]gopher://[/url])([\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)
```

Permalänk: https://www.webforum.nu/p/762287

## #5 — edebro, 2002-08-25T00:55Z

**Pace:** Det vill inte fungera. Jag antar att du har kopierat detta sökmönster från något befintligt script och inte bara skrivit det rakt av (om du inte är en hejare på regexp dvs ;)). Har du något färdigt exempel på reguljära uttrycket i sin helhet?

Permalänk: https://www.webforum.nu/p/762439

## #6 — Pace, 2002-08-25T11:53Z

Japp, det är kopierat & klistrat. När det redan fanns en färdig lösning fann jag ingen anledning att skapa en egen. ;) 

```
Function ParseURLs(TextToParse)
	dim f_strText, m_objRxp, LinkTarget
	
	LinkTarget = "_blank"
	
	Set m_objRxp = New RegExp
	f_strText = TextToParse
	m_objRxp.Pattern="(^|[^""])([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:|file://|[url]telnet://[/url]|[url]gopher://[/url])([\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
	f_strText=m_objRxp.Replace(f_strText,"$1<a target=""" & LinkTarget & """ href=""$2$3"">$2$3</a>$4")
	m_objRxp.Pattern="(^|[^\w/>])(www\.[\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
	f_strText=m_objRxp.Replace(f_strText,"$1<a target=""" & LinkTarget & """ href=""http://$2"">$2</a>$3")
	
	'objRxp.Pattern = "(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)"
	
	m_objRxp.Pattern="(^|[^:>\w])([\w\.]*@[\w\.\-]*\.\w{2,3})(\b|$)"
	f_strText=m_objRxp.Replace(f_strText,"$1<a href=""mailto:$2"">$2</a>")
	ParseURLs = f_strText
End Function
```

Tror den är från emissions wFparser.

Permalänk: https://www.webforum.nu/p/762549

## #7 — edebro, 2002-08-25T18:00Z

Pace: tack som faan. Det ser ut att fungera skitbra. Och nu får jag det i en enda funktion också, ist för två som förut.

Skicka din adress till <mikael@edebro.net> så ska jag skicka din belöning. :birp

Permalänk: https://www.webforum.nu/p/762723

## #8 — voigtann1, 2002-08-25T18:33Z

vårda ditt språk :)

Permalänk: https://www.webforum.nu/p/762740

## #9 — edebro, 2002-08-25T18:41Z

Okej, jag förhastade mig lite. Den fungerade inte alls perfekt. Ta en titt på följande script som jag pillade ihop för att se om det fungerade:

```
<%
Function ParseURLs(TextToParse)
	dim f_strText, m_objRxp
	
	Set m_objRxp = New RegExp
	f_strText = TextToParse
	m_objRxp.Pattern="(^|[^""])([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:|file://|[url]telnet://[/url]|[url]gopher://[/url])([\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
	f_strText=m_objRxp.Replace(f_strText, "$1<a href=""$2$3"">$2$3</a>$4")
	m_objRxp.Pattern="(^|[^\w/>])(www\.[\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
	f_strText=m_objRxp.Replace(f_strText, "$1<a href=""http://$2"">$2</a>$3")
	
	'objRxp.Pattern = "(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)"
	
	m_objRxp.Pattern="(^|[^:>\w])([\w\.]*@[\w\.\-]*\.\w{2,3})(\b|$)"
	f_strText=m_objRxp.Replace(f_strText, "$1<a href=""mailto:$2"">$2</a>")
	ParseURLs = f_strText
End Function
%>

<HTML>
<BODY>

<% If Len(Request.Form("message")) = 0 Then %>
	<FORM NAME="testLinks" ACTION="convertLinks.asp" METHOD="POST">
	<TEXTAREA NAME="message" COLS=100 ROWS=20></TEXTAREA><BR>
	<INPUT TYPE="submit">
	</FORM>
<% Else %>
	<%= ParseURLs(Request.Form("message")) %>
<% End If %>

</BODY>
</HTML>
```

Om ni inte orkar prova scriptet så kan jag meddela att den inte byter ut till länkar om man t ex har en sån här text:
"jag heter mikael, du kan maila till mig på <mikael@edebro.net>"

Den verkar bara länka om det är ett radbryt före själva länktexten.

Och eftersom jag inte kan regular expressions så bra så är det svårt att modifiera det där avancerade sökmönstret.

Permalänk: https://www.webforum.nu/p/762747

---

Tråden på webben: https://www.webforum.nu/amne/asp/51176-hjälp-med-regular-expression
