Avatar billede mattiw Nybegynder
04. juli 2004 - 16:19 Der er 23 kommentarer

RegExp og undtagelser

Se først http://frip.dk/ewire/a.asp

Jeg skal finde alle de steder hvor der står "Winnie" og erstatte dem med et link. Men for at kunne gøre det ordentligt må den ikke finde de steder hvor "Winnie" allerede er et link.

Jeg har absolut ingen anelse om hvordan jeg skal gøre det, så alle forslag er mere end velkomne.

Indtil videre har jeg et pattern som ser således ud:

(\<a.*\>)winnie(\<\/a\>)

ovenstående finder alle steder hvor winnie allerede er et link, den skal bare "vendes om".

Det ville have været nemt hvis der var noget der hed NOT. Men det der jo uheldigvis ikke..


Håber der er nogen der kan hjælpe!

På forhånd tak..

PS: Tekstfeltet på siden kan bruges til at afprøve forskellige patterns...
Avatar billede roenving Novice
04. juli 2004 - 16:32 #1
Til en start kan du jo kigge på resultatet af:

(winnie)<\/[^a]

-- du har jo så sat en gruppering om hele resultatet, så denne vil ikke kunne indkaples i den regexp, du bruger i forvejen, men skal træde i stedet for, måske sådan:

((winnie)<\/[^a]|\s(winnie)(\s|\.))
Avatar billede iknowstuff Nybegynder
04. juli 2004 - 16:34 #2
måske..

(?:<a href.*?>)?(Winnie)(?:</a>)?

hvis winniw er et link i forvejen, vil det blot blive overskrevet med et nyt..
Avatar billede mattiw Nybegynder
04. juli 2004 - 16:42 #3
jojo, men den går jo ikke da der også findes "winnie"r uden html tags omkring.. ?
Avatar billede mattiw Nybegynder
04. juli 2004 - 16:43 #4
ovenstående kommentar var til roenving's kommentar...
Avatar billede mattiw Nybegynder
04. juli 2004 - 16:45 #5
iknowstuff... du har fat i noget...
det bliver nødløsningen hvis det andet ikke kan lade sig gøre..
Avatar billede roenving Novice
04. juli 2004 - 16:49 #6
Men netop derfor den anden udgave, som netop tager højde for at de jo ikke altid er i tags !-)
Avatar billede mattiw Nybegynder
04. juli 2004 - 16:51 #7
ikke her hos mig.. den finder i hvert fald ikke alle eksistenser.. plus at resultatet ikke er "rent"

http://frip.dk/ewire/a.asp?test=%28%28winnie%29%3C%5C%2F%5B%5Ea%5D%7C%5Cs%28winnie%29%28%5Cs%7C%5C.%29%29
Avatar billede roenving Novice
04. juli 2004 - 16:54 #8
Jamen, du har jo også kastet en gruppering udenom, som jeg bemærkede !-)

-- den skal selvfølgelig fjernes, så det er de grupperinger, som er inde i den regexp, jeg har lagt, som bruges ...
Avatar billede roenving Novice
04. juli 2004 - 16:57 #9
-- og udbygget:

((winnie)<\/[^a]|(\s|\.)(winnie)|(winnie)(\s|\.))
Avatar billede roenving Novice
04. juli 2004 - 17:00 #10
-- grunden til at jeg ikke havde punktum med som option foran er, at jeg går ud fra, at du har en ordentlig tekst, så egentlig skal det fjernes, så du bare skriver:

((winnie)<\/[^a]|\s(winnie)|(winnie)(\s|\.))

-- stadig afhængig af, at du fjerner de paranteser, du sætter ind, når du skaber regexp'en !-)
Avatar billede iknowstuff Nybegynder
04. juli 2004 - 17:01 #11
anden mulighed kunne være

Winnie(?!</a>)
Avatar billede mattiw Nybegynder
04. juli 2004 - 17:04 #12
nu forstår jeg slet ingenting.. :)

hvis du ser på resultatet af ((winnie)<\/[^a]|(\s|\.)(winnie)|(winnie)(\s|\.)) så bliver det

Match Value is 'Winnie'.
Match Value is 'Winnie</b'.
Match Value is 'Winnie</b'.
Match Value is 'Winnie</b'.
Match Value is '.Winnie'.

Du kan godt se at det er nogle skæve eksistenser der kommer ud af det ? :)
(Plus at den missede en enkelt winnie)
Avatar billede mattiw Nybegynder
04. juli 2004 - 17:07 #13
iknowstuff... jeg ser at du benytter både ?: og ?! hvad betyder disse?
jeg kan ikke finde noget om dem på msdn..
Avatar billede roenving Novice
04. juli 2004 - 17:10 #14
>>mattiw

Når du laver din regexp, kommer den resulterende vel til at se ca. sådan ud, og så er det klart ...

(((winnie)<\/[^a]|\s(winnie)|(winnie)(\s|\.)))
Avatar billede mattiw Nybegynder
04. juli 2004 - 17:12 #15
nu er jeg fuldstændig lost...

har du prøvet det pattern af på http://frip.dk/ewire/a.asp

hvis ik så prøv lige... det er helt skævt du ;)
Avatar billede mattiw Nybegynder
04. juli 2004 - 17:14 #16
resultatet blev (?!\<a .*)Winnie(?!\<\/a\>)

og den virker som den skal og bør

og siden iknowstuff gav anledning til ideen bør han få point

så iknowstuff, post et svar og du får point herfra
Avatar billede roenving Novice
04. juli 2004 - 17:16 #17
Jeg har prøvet det af på dit link, og jeg kan se, at du tilføjer noget til det pattern, man smider ind i tekstboksen ...
Avatar billede roenving Novice
04. juli 2004 - 17:21 #18
Ah, det kan selvfølgelig være at du bruger en metode, jeg ikke kender, så den automatisk returnerer hele strengen uanset evt. grupperinger inde i ...

Jeg har kigget på den under den forudsætning, at du hentede dem vha regexp-variablen $1 !-)
Avatar billede mattiw Nybegynder
04. juli 2004 - 17:22 #19
nææ.. det tror jeg ikke
Avatar billede mattiw Nybegynder
04. juli 2004 - 17:23 #21
ændret noget altså..
Avatar billede mattiw Nybegynder
04. juli 2004 - 17:24 #22
hmm, underligt at det ikke står der når man kigger på regexp pattern syntax under vbscript...
Avatar billede roenving Novice
04. juli 2004 - 17:53 #23
-- eller SubMatches(1) må det være i vbs ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester