webForumDet fria alternativet

sålla ut och markera ord i en lista...

ASP

29 svar · 1 256 visningar · startad av Eclipse

Medlem sedan juli 20003 825 inlägg
Frågan#1

Jag har en topplista som jag vill plocka ut orden i. Markera orden i.

3 - ukrainas natur
1 - ukrainas ambassad
1 - ukraina visa
1 - ukraina turism
1 - sveriges ambassad i ukraina
1 - fakta om kiev
1 - fakta kiev
1 - allakiev

Hur skriver jag med kod: Leta reda på alla ord mellan " - " och vbCRLF och gör dom i en speciell kod...

Medlem sedan juni 20019 519 inlägg
#2

Har du någon kod just nu att gå efter? Bör går att göra med RegExp

Medlem sedan juli 20003 825 inlägg
#3
FUNCTION validateURL(strText)
	Dim mDelimit
	Dim re
	mDelimit = Chr(0)
	Set re = New RegExp
	re.Global = True
	re.IgnoreCase = true

	' ## PATTERN...
	re.Pattern = ("[ - ].vbCRLF")
	strText =  re.Replace(strText, checkThisWord(mDelimit) & " xx " )

	validateURL = strText
END FUNCTION

Plockat från annat projekt.

Jag är lite dålig på det där med mönster/pattern. Antingen " - " eller "- " på ena sidan och vbCRLF på den andra sidan. Ordet/-en där emellan vill jag jobba med!

Det fungerar... det ser ut som tidigare, utan felmeddelande, så det är svårt att felsöka! Men det där att plocka ut ord fungerar inte.

Medlem sedan juni 20019 519 inlägg
#4

Ditt mönster i RegExp:et måste vara fel. vbCrlf = ny rad. men just nu söker du efter:
[] är träffa allt som finns i denna grupp.

Är 3, 1,1,1,1 alltid ett tal? Jag hade nog gjort:

re.Pattern = "\d+ \- ([^\n]+)\n"
Medlem sedan juli 20003 825 inlägg
#5

Tack!

Min kod är fel, det är därför jag skriver på forumet.

OK, vi säger så här i stället:

re.Pattern = Hjälp mig att plocka ut orden som står mellan 1. "Mellanslag + minustecken + mellanskal" och fram till och med 2. "vbCRLF, radbrytningen".

3 - ukrainas natur
1 - ukrainas ambassad
1 - ukraina visa
1 - ukraina turism
1 - sveriges ambassad i ukraina
1 - fakta om kiev
1 - fakta kiev
1 - allakiev

Jag har studerat Pattern, och annan kod, men det är svårt. Jag förstår inte hur man skriver för att göra ett sökkriteria.

Medlem sedan juni 20019 519 inlägg
#6

ta bara bort \d+ från min kod så hämtar den ut det

Medlem sedan juli 20003 825 inlägg
#7

http://weblogs.asp.net/rosherove/articles/6863.aspx

Jag har studerat alla småtecken på denna länken och kom fram till följande:

re.Pattern = "(\s\-\s)([^\n]+)"

***
Tack för kod! Den fungerar säkert... nu är det replacekoden som vi ska få ordning på...

strText = re.Replace(strText, checkThisWord(mDelimit) & " xx " )

***
Det blir bara en siffra... och jag tror jag fattar! Den tar från första " - " till sista vbCRLF!!

Ja... och då blir det bara en siffra kvar... 3 i detta exemplet!... Hmmm.. Så ska det ju inte vara.

???

It's easy when you know how....! :-)

Medlem sedan juni 20019 519 inlägg
#8

saken är att du inte behöver ha () mellan \s\-\s då du inte behöver gruppera den texten. Den är ju egentligen inte viktig.
Och om du vill hämta ut texten mellan "-" och nyrad så använder du (beroende på hur många () du har $<nummer> i din Replace.

http://www.regular-expressions.info/ är en bra sida om att läsa om RegExp.

Medlem sedan juli 20003 825 inlägg
#9
FUNCTION validateURL(strText)
	Dim mDelimit
	Dim re
	mDelimit = Chr(0)
	Set re = New RegExp
	re.Global = True
	re.IgnoreCase = true

	' ## PATTERN...
	re.Pattern = "\- ([^\n]+)\n"
	strText =  re.Replace(strText, checkThisWord($1$2) & " xx " )

	validateURL = strText
END FUNCTION
Microsoft VBScript compilation  error '800a0408'

Invalid character

/admin/weblog/index.asp, line 139

strText =  re.Replace(strText, checkThisWord($1$2) & " xx " )
---------------------------------------------^

Det är svårt...

Medlem sedan juni 20019 519 inlägg
#10

$1 och $2 är Strängar inte variabler.

strText =  re.Replace(strText, checkThisWord("$1$2") & " xx " )
Medlem sedan juli 20003 825 inlägg
#11
FUNCTION checkThisWord(word)
  response.write "<b>" & word & "</b>"
  [...]
END FUNCTION

Detta är grymt rörigt...

Jag fattar inte vad mDelimit gör och när jag skriver "$1", inlkusuive dubbelfjumparna i koden, så skrivs det ut dollar ett ($1) i klartext i den lilla koden ovan.

Medlem sedan juni 20019 519 inlägg
#12

Din funktion är inte en funktion.... den ser mer ut som en Sub Funktion enligt min mening.

Function checkThisWord(word)
checkThisWord = "<b>" & word & "</b>"
End Function

ska det nog vara. En Funktion skall retunera något. Medans en Sub funktion "körs".

Medlem sedan juli 20003 825 inlägg
#13
Function checkThisWord(word)
-- checkThisWord = word & " -- " & LEN(word)
End Function

Alla värden i word blir bara två tecken... Hmm... klurigt!

Medlem sedan juni 20019 519 inlägg
#14

1. Varför har du ChecThisWord? är det någon kod du gör eller är det bara för att göra texten fet?

Function FormatList(strText)
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Global = True
	re.Pattern = "(- )([^\n]+)\n|$"
	FormatList = re.Replace(strText, "$1<strong>$2</strong><br />")
End Function

Fungera för mig.

Medlem sedan juli 20003 825 inlägg
#15

Tack!

Jag ska studera koden noggrant. Koden på forumet är lite tramsig, kan hålla med om det.

Koden kommer från ett annat sammanhang, mer komplext. Det är inte bara att göra fet text! :-) Jag brukar ibland skriva saker med response.write för att kolla om saker fungerar. Var man är, så att säga. Eftersom det är en lista med många ord gjorde jag dom feta för att särskilja dom från de andra orden...

Medlem sedan juni 20019 519 inlägg
#16

Citat från RegexBuddy:

' (- )([^\n]+)\n|$
' 
' Options: case insensitive; ^ and $ match at line breaks
' 
' Match either the regular expression below (attempting the next alternative only if this one fails) «(- )([^\n]+)\n»
'    Match the regular expression below and capture its match into backreference number 1 «(- )»
'       Match the characters “- ” literally «- »
'    Match the regular expression below and capture its match into backreference number 2 «([^\n]+)»
'       Match any character that is not a “A line feed character” «[^\n]+»
'          Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
'    Match a line feed character «\n»
' Or match regular expression number 2 below (the entire match attempt fails if this one fails to match) «$»
'    Assert position at the end of a line (at the end of the string or before a line break character) «$»
Medlem sedan juli 20003 825 inlägg
#17

(Du har annan kod i detta sista exemplet, men det kanske gör det samma??)

Detta fungerar:

Function FormatList(strText)
	strText = strText & vbCRLF
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Global = True
	re.Pattern = "(- )([^\n]+)\n|$"
'	FormatList = re.Replace(strText, "$1<strong>$2</strong><br />")
	FormatList =  re.Replace(strText, checkThisWord("$2"))
End Function

Function checkThisWord(word)
-- checkThisWord = "<b>" & word & "</B><BR>"
End Function

Alltså...! checkThisWord är egentligen en mer avancerad funktion som även används på andra platser i hemsidan. Därför kan jag inte skriva den koden i samma funktion som den andra. (Koden gör mer än att bara feta till texten. Den kollar det specifika ordet mot några andra specifika listor... I färdigt utförande ska den inte feta till texten, däremot göra en liten markering om ordet finns eller inte.)

Medlem sedan juli 20003 825 inlägg
#18

Detta fungerar INTE!!

Function checkThisWord(word)
	IF RIGHT(word,3) = ".se" THEN word = replace(word, ".se", "")
	word = replace(word, " ", "")
	word = replace(word, ".", "")
	checkThisWord = "<b>" & word & " LEN:" & LEN(word) & "</B><BR>"
end Function

Jag har nu ÄNTLIGEN lokaliserat en vanlig sak som inte fungerar. Jag har testat lite olika varianter och även fast rätt ord skrivs ut i fet stil är längden på word 2 (dvs. LEN(word) = 2) på alla raderna... Så ska det inte vara!

Medlem sedan juni 20019 519 inlägg
#19

1. Vad är strText som du skickar in i din funktion... Exakt vad skickar du in... är omöjligt att gissa detta för mig.
2. På Funktioner du använder ger inte två rader kod om det är 10 rader du använder. Är omöjligt.
3. strText = strText & vbCRLF behöver du inte ha då jag har lagt till \n|$ i slutet av regExp.

red. Varför len blir två är att det är strängen "$2" som kommer in i funktionen... det är inte förrän efter RegExpet har körts som den ersätter $2 med vad som har varit i texten tidigare.

Medlem sedan juli 20003 825 inlägg
#20

3. OK, ska ta bort det.

2. Fattar inte.

1. Bifogar fil. I början av tråden förklarade jag det... men det är lätt att glömma!

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)