14. marts 2005 - 19:39Der er
21 kommentarer og 1 løsning
Undgå grouping i regulært udtryk?
Jeg har lavet dette udtryk
[A-Z][a-z]+( [A-Z][a-z]+)+
som skal kunne matche en streng bestående af et stort bogstav, og et eller flere små bogstaver, efterfulgt af en eller flere forekomster af strengen med mellemrum, et stort bogstav og et eller flere små bogstaver.
Udtrykket virker sådan set fint nok, problemet er bare, at hvis jeg tester mit udtryk på en hjemmeside, jeg har fundet, og angiver en streng med 2 mellemrum i, som f.eks.
Ab Cd Ef
så matcher den både på hele strengen, men også på Ef, og jeg ønsker kun, at den skal matche hele strengen. Jeg aner ikke, hvordan jeg kan gøre det her uden grouping. Nogle, der kan hjælpe?
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
Nej, det giver samme resultat :( Jeg får stadigvæk også group delen testet. Jeg går ud fra at den ikke skal være med, men så ved jeg ikke, hvordan jeg ellers kan lave en + på det udtryk.
Men hvad er problemet i, at du får sidste del med?
Derudover er JS regulære udtryk ikke så kraftfulde som Perl-versionen - den kan noget mere (blandt andet gruppere uden at lave det til et pattern på den måde).
Nu er sagen, som sagt, at jeg ikke tester det i mit script, jeg bruger en hjemmeside til det lige nu. Og på den hjemmeside får jeg at vide, at både hele min streng, men også " Ef" delen matcher, mit problem er altså at jeg vil skrive det om, således, at det KUN er hele min streng, der matcher, som det er nu, matcher den jo også min group...derfor går jeg ud fra at jeg skal fjerne de (), og så på en anden måde angive at det er et udtryk for sig.
Jeg tror, du har misforstået mig. Når jeg siger på en hjemmeside, mener jeg ikke på den, jeg selv er i gang med at kode, men på en, der ligger på nettet, og som jeg bruger til at teste regulære udtryk med.
Så handler det jo bare om, at du helt er med på outputtet fra den side :)
Det står bare, at match 1 (som er markeret med blåt i grafikken) er matchet op og heri er der et undermatch, der er " Ef" - men " Ef" i sig selv matcher ikke hele udtrykket.
Andet står der såmænd ikke - dit regulære udtryk matcher fint hvad det skal matche.
Ja, det ved jeg godt, at det gør, men jeg ønsker at lave mit udtryk om, således at jeg ikke skal bruge grouping, og dermed ikke får den undermatch, når jeg tester det, jeg ved bare ikke, hvad jeg ellers kan bruge i stedet for ()?
Da (?:udtryk) giver et udtryk, der opfører sig fuldstændig som var der kun (udtryk), men det bliver ikke medtaget som en undermatch. Det har man dog ikke tilgængeligt i JavaScript implementationen og du kan derfor (så vidt jeg ved) ikke lave det på anden vis.
Men jeg kan stadig ikke se, hvorfor det ikke skulle være godt nok - det vil jeg insistere på, til jeg dør! :D
Hmmm...jeg har lige prøvet udtrykket (dog uden /g) på den side, som åbenbart skulle benytte sig af JavaScript, og der fungerer det som jeg vil have det til, altså kun en match :) Hvorfor XSLT (som det reelt set er, jeg skal have det til at virke i) ikke godtager det udtryk, er mig en gåde, men skidt, problemet er løst :) Så hvis du lige gider at smide et svar :)
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.