webForumDet fria alternativet

RegExp tar ut varandra

ASP

24 svar · 353 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

Hejsan!

Håller på att tappa skägget (rakade iofs av det imorrse, men det är ju ett talesätt), har försökt få ihop två regexp-replacar, båda fungerar bra nä man använder dom var för sig, men när man använder dom tillsammans så blir det fel.

		objRxp.Pattern = (http://)(\S)(\S+)"
		strInString = objRxp.Replace(strInString, " <a title=""Länk till $2$3 (öppnas i nytt fönster)"" target=""" & strTarget & """ href=""$1$2" & strDelimiter & "$3"">$2" & strDelimiter & "$3</a>")
		objRxp.Pattern = "\[url=([^<][\S]+[^\]])\](.*?)\[\/url\]"
		strInString = objRxp.Replace(strInString,"<a title=""Länk till $2 (öppnas i nytt fönster)"" href=""$1"" target="""&strTarget&""">$2</a>")

Problemet ligger självkalart i att den första ändrar de url:er som ligger i och på så sätt blir allt fel... jag tycker mig ha testat alla möjliga varianter för att få bukt på problemet, men utan resultat (förutom lite udda lösningar som jag inte vill använda).

Så om någon kan se hur detta skall lösas så är jag evigt tacksam... :)

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan jan. 2001510 inlägg
#2

Jag har inte koll på så mycket RegExp men jag undrar vad det är du försöker göra? :)

/JANspeed

Medlem sedan jan. 2001510 inlägg
#3

Som sagt kan jag inte så mycket om RegExp men måste du använda bägge satserna? :)

If InStr(strInString, "[url=") Then

objRxp.Pattern = "\[url=([^<][\S]+[^\]])\](.*?)\[\/url\]"
strInString = objRxp.Replace(strInString,"<a title=""Länk till $2 (öppnas i nytt fönster)"" href=""$1"" target="""&strTarget&""">$2</a>")

Else

objRxp.Pattern = (http://)(\S)(\S+)"
strInString = objRxp.Replace(strInString, " <a title=""Länk till $2$3 (öppnas i nytt fönster)"" target=""" & strTarget & """ href=""$1$2" & strDelimiter & "$3"">$2" & strDelimiter & "$3</a>")

End If
Medlem sedan dec. 19998 577 inlägg
#4

Vad jag vill göra är att detta scenario:

Användaren postar ett inlägg, han har dels en vanlig länk typ: http://www.webeye.nu (den skall ju självklart länkas)

Och dels har han skrivit in [url=http://www.webeye.nu]webeye.nu och denna skall ju också länkas enligt scriptet.

Det är alltså när jag använder båda två som problemet uppstår.

Med "If InStr(strInString, "Vide rox = new Vide();
rox.learn("C#");
webeye.nu

Medlem sedan juni 20019 024 inlägg
#5

Jag vet hur det känns: ;)
http://cgi.webforum.nu/wf/Forum11/HTML/005624.html

Behöver också hjälp med detta! Pronto!!

------------------
Peter D

Medlem sedan jan. 2001510 inlägg
#6

Du kan inte skilja dem åt genom ett mellanslag i RegExp mönstret då?

Dvs. att den på http://www.adress.nu söker efter http:// i början och mellanslag i slutet och på \adress"]http://www.adress.nu]adress så söker den efter http:// i början och ] i slutet?

Hoppas att alla mina tecken kommmer med som de ska nu. :)

/JANspeed

Medlem sedan juni 20008 205 inlägg
#7

Eftersom jag redan är i farten, så...
\+)">.*?</a>\](.*?)\[/url\]
Med det här mönstret borde url:en hamna i $1 och beskrivningen i $2. Inte den vackraste lösningen, kanske, men den borde funka.

------------------
The mud can make you prisoner, the plains can make you dry,
the snow can burn your eye but only people make you cry...

[Redigerat av Joe Mama den 22 aug 2001]

Medlem sedan dec. 19998 577 inlägg
#8

Hehe, ännu en ful lösning till arkivet... den där kan faktiskt fungera, även om det är en nödlösning ;)

Egentligen vill jag att detta skall fungera, men det gör det inte:

"\[url=([b][^<][/b][\S]+[^\]])\](.*?)\[\/url\]"

Den skall alltså bara träffa när den inte hittar ett "<" efter "="...

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan juni 2000690 inlägg
#9

Kul, jag satt och brottades med samma sak förra veckan (till mitt nyhetssystem till http://www.bengan.com/it/ ).
Så länge struntade jag i vanliga http:// länkar och använder pattern:

	objRxp.Pattern = "\[url=(.+?)\](.+?)\[/url\]"
	strInString = objRxp.Replace(strInString, "<a target=""" & strTarget & """ href=""$1""><B>$2</B></a>")

	objRxp.Pattern = "\[bild=(.+?)\]"
	strInString = objRxp.Replace(strInString, "<img border=""0"" src=""$1"" alt=""Bild!"" vspace=""2"" hspace=""5"">")

	objRxp.Pattern = "\[citat\]"
	strInString = objRxp.Replace(strInString, "<p><FONT COLOR=""#800000""><i>&quot;")

	objRxp.Pattern = "\[/citat\]"
	strInString = objRxp.Replace(strInString, "&quot;</i></FONT></p>")

Detta hjälper dock inte Vide såklart :e

------------------
MvH
/Bengan
www.bengan.com | Brossans Räjser
"Better to be hated for who you are than loved for who you're not."

Medlem sedan juni 20019 024 inlägg
#10

Hmmm... det är ju URL-översättaren som förstör allting, så man skulle ju kunna göra så att den kollar ifall det finns något [ och ] eller [kodd] och [/kood] mellan URL:en - i så fall skiter den i att bearbeta den.

------------------
Peter D

[Redigerat av Pace den 29 aug 2001]

Medlem sedan jan. 2001510 inlägg
#11

Typ så här knåpade jag ihop. Den funkar för mig. :)


'Transform [url="http://s"]http://s[/url] 
objRegExp.Pattern = "\s{1,}http://(.*?)[\.,]{0,}[\s{1,}]"
strText = objRegExp.Replace(strText," <a href=""http://$1"">http://$1</a> ")

'Transform [URL]s
objRegExp.Pattern = "\[url=(.*?)\](.*?)\[\/url\]"
strText = objRegExp.Replace(strText,"<a href=""$1"">$2</a>")

/JANspeed

Medlem sedan dec. 19998 577 inlägg
#12

Jo, så har jag löst det nu (nästan), problemet ligger ju i att man skall kunna ha en länk som börja i början av en rad...

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan juni 20008 205 inlägg
#13

Öh, \s matchar ny rad också. Dock inte början på strängen...

------------------
The mud can make you prisoner, the plains can make you dry,
the snow can burn your eye but only people make you cry...

[Redigerat av Joe Mama den 22 aug 2001]

Medlem sedan juni 2000690 inlägg
#14

Hmm, vad blir den praktiska skillnaden mellan '(.+?)' i min kod och '(.*?)'?

Träffar (.*?) även om det inte finns några tecken alls, typ?

------------------
MvH
/Bengan
www.bengan.com | Brossans Räjser
"Better to be hated for who you are than loved for who you're not."

[Redigerat av Bengan den 29 aug 2001]

Medlem sedan jan. 2001510 inlägg
#15

ger en url, fast när jag testar med (.+?) så blir det krupp i min funktion i alla fall. Vet dock inte varför.

/JANspeed

Medlem sedan jan. 2001510 inlägg
#16

Jo, så har jag löst det nu (nästan), problemet ligger ju i att man skall kunna ha en länk som börja i början av en rad...

Öh, \s matchar ny rad också. Dock inte början på strängen...

Om man klämmer in en vbcrlf innan texten så funkar det utmärkt. Dock så får man ju tänka på detta innan man konverterar alla vbcrlf till <br>. :)

/JANspeed

Medlem sedan jan. 2001510 inlägg
#17

För att kunna lösa det på något annat sätt så får man nog hitta ett tecken som motsvarar allra första början? :)

/JANspeed

Medlem sedan juni 2000690 inlägg
#18

Kanske lägga in en Chr(0) i början av strängen innan man kör regexpo och sen lägga till den i mönstret?

------------------
MvH
/Bengan
www.bengan.com | Brossans Räjser
"Better to be hated for who you are than loved for who you're not."

Medlem sedan dec. 19998 577 inlägg
#19

Janspeed, testade ditt pattern och det blev som jag sa, börjar länken på en ny rad så länkas den inte, trycker ajg däremot in ett space framför så länkas den...

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan juni 20008 205 inlägg
#20

Prova (^|\s) och kom ihåg att stoppa tillbaks även det mönstret vid ersättning (så att url:en blir $2). Funkar i JavaScript iaf.

------------------
The mud can make you prisoner, the plains can make you dry,
the snow can burn your eye but only people make you cry...

[Redigerat av Joe Mama den 22 aug 2001]

269 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)