Avatar billede emkay Nybegynder
28. marts 2008 - 10:50 Der er 15 kommentarer og
1 løsning

Finde alt andet end en streng

Hey

Hvordan kan man søge efter alt andet end */  ??

Jeg har f.eks. denne kode:

/*
* Date prototype extensions. Doesn't depend on any
* other code. Doens't overwrite existing methods.
*
* Adds dayNames, abbrDayNames, monthNames and abbrMonthNames static properties and isLeapYear,
* isWeekend, isWeekDay, getDaysInMonth, getDayName, getMonthName, getDayOfYear, getWeekOfYear,
* setDayOfYear, addYears, addMonths, addDays, addHours, addMinutes, addSeconds methods
*
* Copyright (c) 2006 Jörn Zaefferer and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
*
* Additional methods and properties added by Kelvin Luck: firstDayOfWeek, dateFormat, zeroTime, asString, fromString -
* I've added my name to these methods so you know who to blame if they are broken!
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/

/*sd
* An Array of day names starting with Sunday.
*
* @example dayNames[0]
* @result 'Sunday'
*
* @name dayNames
* @type Array
* @cat Plugins/Methods/Date
*/
Date.dayNames = ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'];

/**
* An Array of abbreviated day names starting with Sun.
*
* @example abbrDayNames[0]
* @result 'Sun'
*
* @name abbrDayNames
* @type Array
* @cat Plugins/Methods/Date
*/
Date.abbrDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];



Den kvikke vil bemærke at det er noget javascript.
Her skal jeg så matche de forskellige kommentarer i javascriptet. Desværre er der bare nogle funktioner inde i nogle af scriptsene hvor der står /* så jeg kan ikke bare matche på /\*.*\*/
Jeg bliver derimod nødt til at matche på \r\n/\* for at finde starten af en kommentar. På den måde finder jeg kun de steder hvor /* står lige efter et linjeskift.
Når jeg skal matche slutningen er det straks lidt sværere. Jeg skal finde første forekomst af */ efter der har været flere linjer med alle mulige tegn.

Jeg har forsøgt med \r\n/\*[^(\*/)]* men den matcher kun ned til den første * hvor den jo skulle springe den over og først stoppe når den når til */

Hvordan gør man det?

På forhånd tak

M
Avatar billede kalp Novice
28. marts 2008 - 12:02 #1
måske [>\*](.*?/)[(\*\n)$]
Avatar billede emkay Nybegynder
28. marts 2008 - 13:00 #2
Nope.. Den virker slet ik. :(
Avatar billede nielle Nybegynder
28. marts 2008 - 18:12 #3
Sådan?

/\*.*?\*/
Avatar billede emkay Nybegynder
31. marts 2008 - 09:10 #4
Nope.. Det har jeg nemlig også prøvet, da det jo burde virke, men der er no match... Den finder ikke en dyt.. :(
Avatar billede emkay Nybegynder
31. marts 2008 - 12:53 #5
Wuhu! Jeg fandt det selv :P
\r\n\/\*.*?(\*\/) og så skal options sættes til singleline.

Mange tak
Velbekomme

:D
Avatar billede nielle Nybegynder
31. marts 2008 - 15:58 #6
Det er nok den med singleline der er det vigtige. Det burde (læs: skal) virke med mønsteret:

/\*.*?\*/
Avatar billede nielle Nybegynder
31. marts 2008 - 16:01 #7
I øvrigt vil dit forslag til et mønster ikke fange den kommentar som står *helt* i toppen af filen.
Avatar billede emkay Nybegynder
01. april 2008 - 08:56 #8
Det er med vilje. Det er jo typisk den kommentar man ikke MÅ fjerne, som det også er tilfældet i den eksempel-kode jeg har skrevet.
Så det er skam helt med vilje :)

Problemet med dit forslag (som jeg også selv havde prøvet) er at man åbenbart ikke kan søge efter / ved bare at skrive /. Man skal først escape den: \/
Det kan jeg bare ikke få til at give mening, for / har da ingen speciel betydning når den står alene vel? :S
Anyway, så virker det nu :)
Avatar billede roenving Novice
01. april 2008 - 16:52 #9
Slash betyder jo regex-start/-slut ...
Avatar billede nielle Nybegynder
01. april 2008 - 17:49 #10
> Problemet med dit forslag (som jeg også selv havde prøvet) er at man åbenbart ikke kan søge efter / ved bare at skrive /. Man skal først escape den: \/

Det er fuldstændig afhængigt af programmeringssproget, og siden at du siger at du skal escape den gætter jeg på at du programmere i PHP, JavaScript eller Perl. Korrekt?

Faktisk er det ikke nødvendigvis korrekt at man så skal escape den alligevel.
Avatar billede emkay Nybegynder
01. april 2008 - 22:07 #11
roenving:
Siger du at når man f.eks. skriver /\*.*?\*/ så stopper regex'en faktisk før den overhovedet er kommet igang fordi det første tegn er et /?
Så kan jeg da bedre forstå det :D Synes bare ikke jeg kunne finde noget dokumentation om at / havde sin egen specielle betydning og derfor skulle escapes, men det skal den så åbenbart.

nielle:
Men det er måske fordi der er forskel på programmeringssproget at jeg ikke har kunne finde noget om det..? Hmm... Interesant. Troede al regex var det samme uanset hvor man brugte det. Jaja, man bliver klogere hver dag :)
Jeg programmerer i VB.NET.
Avatar billede nielle Nybegynder
01. april 2008 - 22:35 #12
Når at det er forskellig i forskellige programmeringssporg, så skyldes det som regel at strenge behandles forskelligt, og at regexp-mønstre jo netop er strenge. Se nogen af forskellene her:

http://www.eksperten.dk/artikler/1160
Avatar billede nielle Nybegynder
01. april 2008 - 22:42 #13
Lige i VB.Net er det dog ikke nødvendig at escape et '/'-tegn.

Dette her virker:

text = Regex.Replace(text, "/\*.*?\*/", "", RegexOptions.Singleline)
Avatar billede emkay Nybegynder
02. april 2008 - 09:16 #14
Hmm.. Synes bare det begyndte at virke lige da jeg begyndte at escape det, men det kan jo være jeg også har lavet en anden ændring i samme omgang.
Anyway.. Tak for hjælpen :)
Avatar billede nielle Nybegynder
02. april 2008 - 18:24 #15
Det er udelukkende den der RegexOptions.Singleline som har løst problemet.

Hvis du da ellers er interesseret i at læse mere om regexp, så her jeg skrevet disse 4 artikler om emnet her på E:

http://www.eksperten.dk/artikler/1156
http://www.eksperten.dk/artikler/1157
http://www.eksperten.dk/artikler/1160
http://www.eksperten.dk/artikler/1162
Avatar billede emkay Nybegynder
03. april 2008 - 08:55 #16
Ok så. Jeg har allerede læst 1160'eren da du gav et link til den i forgårs, men det kunne da være man også skulle ta et kig på de andre.
Mange tak i hvert fald :)
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