/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
regexp til at parse form
Fra : Leif Neland


Dato : 04-04-11 09:16

FUT: dk.edb.internet.webdesign.serverside.php

Jeg søger et regexp, der kan parse
key = value
key=value
key = "value"
key = 'value'
key="val ue"
key='val ue'
key="val'ue"
key='val"ue'
key=''
key=""
key = ''
key = ""

Jeg har prøvet med $regexp='/ (\S*)\s*=\s*((["\']?)(\S*)\3)/';
men den fanger ikke alle muligheder, specielt ikke de, hvor value er tom.


Leif



 
 
Birger Sørensen (04-04-2011)
Kommentar
Fra : Birger Sørensen


Dato : 04-04-11 10:07

Leif Neland skrev den 04-04-2011:
> FUT: dk.edb.internet.webdesign.serverside.php
>
> Jeg søger et regexp, der kan parse
> key = value
> key=value
> key = "value"
> key = 'value'
> key="val ue"
> key='val ue'
> key="val'ue"
> key='val"ue'
> key=''
> key=""
> key = ''
> key = ""
>
> Jeg har prøvet med $regexp='/ (\S*)\s*=\s*((["\']?)(\S*)\3)/';
> men den fanger ikke alle muligheder, specielt ikke de, hvor value er tom.
>
>
> Leif

Måske kan parse_ini_string() ?
http://dk.php.net/manual/en/function.parse-ini-string.php

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Klaus Alexander Seis~ (04-04-2011)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 04-04-11 22:55

Leif Neland skrev:

> Jeg søger et regexp, der kan parse
> key = value
> key=value
> key = "value"
> key = 'value'
> key="val ue"
> key='val ue'
> key="val'ue"
> key='val"ue'
> key=''
> key=""
> key = ''
> key = ""
>
> Jeg har prøvet med $regexp='/ (\S*)\s*=\s*((["\']?)(\S*)\3)/';
> men den fanger ikke alle muligheder, specielt ikke de, hvor value er
> tom.

Behøver du gøre det i ét hug? Ku' du ikke starte med at splitte i en venstre
og en højre halvdel efter første lighedstegn, derefter strippe whitespace og
evt. quotes? Jeg ved ikke hvilket sprog du bruger (php?), men i python ku'
det være noget i retning af

#v+

if line.count('=') > 0:
(key, val) = line.split('=', 1)
(key, val) = (key.strip(), val.strip())
if val[0] == val[-1] and val[0] in ('"', "'"):
val = val[1:-1]

#v-

Jeg så dit indlæg i d.e.s.unix og abonnerer ikke på den gruppe du har sat
fut til, så jeg ser ikke evt. svar på dette indlæg.

Mvh,

--
Klaus Alexander Seistrup | Abolish European Summertime
gopher://port70.dk/ | Please sign the petition ⌘ http://j.mp/noeudst

Leif Neland (06-04-2011)
Kommentar
Fra : Leif Neland


Dato : 06-04-11 09:56


"Klaus Alexander Seistrup" <klaus@seistrup.dk> skrev i en meddelelse
news:slrn-4d9a3c00-91fd96ad@klaus.seistrup.dk...
> Leif Neland skrev:
>
>> Jeg søger et regexp, der kan parse
>> key = value
>> key=value
>> key = "value"
>> key = 'value'
>> key="val ue"
>> key='val ue'
>> key="val'ue"
>> key='val"ue'
>> key=''
>> key=""
>> key = ''
>> key = ""
>>
>> Jeg har prøvet med $regexp='/ (\S*)\s*=\s*((["\']?)(\S*)\3)/';
>> men den fanger ikke alle muligheder, specielt ikke de, hvor value er
>> tom.
>
> Behøver du gøre det i ét hug? Ku' du ikke starte med at splitte i en
> venstre
> og en højre halvdel efter første lighedstegn, derefter strippe whitespace
> og
> evt. quotes? Jeg ved ikke hvilket sprog du bruger (php?), men i python
> ku'
> det være noget i retning af
>

Jeg vil gerne kunne køre det på et helt input-tag (hvor < > er klippet fra)
med en preg_match_all så den kan matche
name='fee' value='fie' class='foo' id='fum'
Så derfor skulle det gerne kunne klares i en omgang.

> --
> Klaus Alexander Seistrup | Abolish European Summertime
> gopher://port70.dk/ | Please sign the petition ?
> http://j.mp/noeudst



Andreas Andersen (05-04-2011)
Kommentar
Fra : Andreas Andersen


Dato : 05-04-11 06:05

Den 04-04-2011 10:16, Leif Neland skrev:
> FUT: dk.edb.internet.webdesign.serverside.php
>
> Jeg søger et regexp, der kan parse
> key = value
> key=value
> key = "value"
> key = 'value'
> key="val ue"
> key='val ue'
> key="val'ue"
> key='val"ue'
> key=''
> key=""
> key = ''
> key = ""
>
> Jeg har prøvet med $regexp='/ (\S*)\s*=\s*((["\']?)(\S*)\3)/';
> men den fanger ikke alle muligheder, specielt ikke de, hvor value er tom.

Hvad med dette:

/(?P<key>[^\s=]*)\s*=\s*(?P<value>(?(?="|')(?P<d>'|")[^\k{d}]*\k{d}|[^\s'"]*))/

Måske lidt langt men det synes at virke på en online-tester, jeg kørte
det på (http://www.pagecolumn.com/tool/pregtest.htm). ' eller " skal nok
lige escapes inden det dur i PHP.

--
Andreas

Bertel Lund Hansen (05-04-2011)
Kommentar
Fra : Bertel Lund Hansen


Dato : 05-04-11 23:18

Leif Neland skrev:

> Jeg søger et regexp, der kan parse

Jeg har en non-regexp løsning, så sprong over hvis du er ligeglad
med den slags. Jeg har lavet det på flere linjer, men det kan
godt skrive som en enlinjers.

> key = value
> key=value
> key = "value"
> key = 'value'
> key="val ue"
> key='val ue'
> key="val'ue"
> key='val"ue'
> key=''
> key=""
> key = ''
> key = ""

$key = str_replace(' ','',trim($value));
$key = str_replace('"','',key);
$key = str_replace("'",'',key);

Nu er $key enten en egentlig streng uden anførselstegn og
mellemrum eller tom.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste