22. januar 2007 - 15:15
Der er
17 kommentarer
Uddrag noget fra en path
jeg har forskellige paths, og de kan se ud på følgende måde: '/Apotek/Medicin/Piller/Pinex.aspx' '/Apotek/Medicin/Piller/' 'Apotek/Medicin' '/Motor/Biler/Ford' '/Motor/Biler/Ford/Mondeo.aspx' Reglen skal være, at jeg skal have 'malke' de to sidste niveauer ud. '/Apotek/Medicin/Piller/Pinex.aspx' -> 'Medicin/Piller' '/Apotek/Medicin/Piller/' -> 'Medicin/Piller' 'Apotek/Medicin' -> 'Apotek/Medicin' '/Motor/Biler/Ford' -> 'Biler/Ford' '/Motor/Biler/Ford/Mondeo/Expressive.aspx' -> 'Ford/Mondeo' '->' betyder at den har været igennem et regex. Er der nogen der kan hjælpe, er nemlig ikke stærk i regular expressions.
Annonceindlæg tema
22. januar 2007 - 15:17
#1
Strengen jeg får ud, skal også se ud som angivet.....dvs ingen '/' forrest eller bagerst. Kun imellem for at adskille de to strenge.
22. januar 2007 - 16:30
#2
Gør egentligt ikke noget hvis '/' kommer foran eller bagved....det skal jeg nok ordne programmatisk....
22. januar 2007 - 16:58
#3
Du skriver ikke noget om sprog, så får en PHP-løsning: $match = preg_match('^\/[^\/]+\/([^\/]+\/[^\/]+)(\/|$)', $str, $matches); kig så i $matches: print_r($matches);
22. januar 2007 - 17:02
#4
Og det virkede jo slet ikke :P Dette er testet: <?php $s = array('/Apotek/Medicin/Piller/Pinex.aspx', '/Apotek/Medicin/Piller/', 'Apotek/Medicin', '/Motor/Biler/Ford', '/Motor/Biler/Ford/Mondeo.aspx'); foreach ($s as $str) { $match = preg_match('@(^|/[^/]+/)([^/]+/[^/]+)(/|$)@', $str, $matches); if ($match) { print $str . ' -> ' . $matches[2] . "\n"; } } ?>
22. januar 2007 - 17:23
#5
Hvad skal afgøre om sidste led er et bibliotek eller en fil?
22. januar 2007 - 17:24
#6
Hmmm det er ellers i C#, men regulære udtryk er vel det samme
22. januar 2007 - 17:28
#7
Udover det så skal, der ikke splittes på strenge eller noget som helst. Strengen jeg vil RegExp'e er dynamisk, og jeg kender ikke altid formatet. De eksempler jeg har angivet er dem, der i det regulære udtryk skal være regler for.
22. januar 2007 - 17:29
#8
sidste led er altid bilblioteket som filen ligger i.
22. januar 2007 - 17:30
#9
...og før den biblioteket.... ikke mere.
22. januar 2007 - 17:51
#10
Jo, regulære udtryk bør være ens langt hen ad vejen. Kan '@(^|/[^/]+/)([^/]+/[^/]+)(/|$)@' bruges? Den giver samme resultat som du har skrevet i spm (som match 2)
22. januar 2007 - 19:59
#11
Hmmm den virker ikke.... Jeg har behov for et udtryk, der kan tage alle flg. tekst strenge: '/Apotek/Medicin/Piller/Pinex.aspx' -> 'Medicin/Piller' '/Apotek/Medicin/Piller/' -> 'Medicin/Piller' 'Apotek/Medicin' -> 'Apotek/Medicin' '/Motor/Biler/Ford' -> 'Biler/Ford' '/Motor/Biler/Ford/Mondeo/Expressive.aspx' -> 'Ford/Mondeo' Som man kan se...er jeg kun interesseret i de sidste to mapper ekskl. filen (her aspx filen) Håber der er nogle tunge regex drenge herinde.....
22. januar 2007 - 21:15
#12
Ups - den sidstnævnte glipper. Det havde jeg overset.
22. januar 2007 - 21:35
#13
Jeg tror desværre ikke mine evner rækker længere end til denne: @([^/]+/[^/.]+)(/[^/]*)?$@ Den giver 0: /Apotek/Medicin/Piller/Pinex.aspx -> Medicin/Piller 1: /Apotek/Medicin/Piller/ -> Medicin/Piller 2: Apotek/Medicin -> Apotek/Medicin 3: /Motor/Biler/Ford -> Motor/Biler # Her er fejlen - den matcher for tidligt 4: /Motor/Biler/Ford/Mondeo/Expressive.aspx -> Ford/Mondeo Jeg kan ikke lige lure, hvordan man klarer den. Desværre.
24. januar 2007 - 17:19
#14
(?<parent>[^/]+)/(?<child>[^/]+)/?$ Sådan :-)
24. januar 2007 - 17:22
#15
Fandt ud af at jeg ikke behøvede filtrering af filer....
24. januar 2007 - 19:11
#16
Hehe - nå ok, ja det gjorde det jo en tand nemmere ;)
03. februar 2007 - 15:21
#17
Lukketid?
Kurser inden for grundlæggende programmering