/ 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
ereg()-pattern.
Fra : Anders K. Madsen


Dato : 16-06-03 19:40

Hey folks!
Nu har jeg (helt bogstaveligt) brugt en halv dag på at sidde og rode med
et enkelt rådent regex-pattern...

Jeg har en tekst liggende i $content og vil gerne udskille alle
optrædender af <?php og ?> og hvad der nu måtte være derimellem.

Altså, hvis $content indeholder følgende:
--- $content {{{ ---
Bla bla bla bla bla
<?php
echo 'Hello world!';
?>
Ho hum ho hum ho ho ho!
<?php
echo 'And goodbye cruel world!';
?>
Fred på jord!
--- }}} $content ---

Så kører jeg den gennem:
ereg($pattern, $content, $regs);
for at få de matchede patterns over i $regs, hvori jeg så ville kunne finde:
$regs[0] = $content;
$regs[1] = "Bla bla bla bla bla\n";
$regs[2] = "<?php\necho \'Hello world!\';\n?>";
$regs[3] = "\nHo hum ho hum ho ho ho!\n";
$regs[4] = "<?php\necho \'And goodbye cruel world!\';\n?>";
$regs[5] = "\nFred på jord!";

Problemet er bare at jeg ikke kan finde det rigtige pattern...
Lige nu har jeg '[(<\?php[^(\?>)]+\?>)]*' og det er mildest talt en
fiasko...
Jeg kan simpelthen ikke få den til at udskille _alle_
(<\?php[^(\?>)]+\?>), kun den første eller sidste...

Links, regexps, hvad som helst er velkomment... Dog vil jeg lige sige at
jeg har læst en masse regex-manualler, men fatter stadig ikke en hat
mere end jeg gjorde for 2 dage siden...

Mvh.
   Madsen


 
 
Kim Emax (16-06-2003)
Kommentar
Fra : Kim Emax


Dato : 16-06-03 23:40

Anders K. Madsen wrote:

> Hey folks!
> Nu har jeg (helt bogstaveligt) brugt en halv dag på at sidde og rode
> med et enkelt rådent regex-pattern...
>
> Jeg har en tekst liggende i $content og vil gerne udskille alle
> optrædender af <?php og ?> og hvad der nu måtte være derimellem.
>
> Altså, hvis $content indeholder følgende:
> --- $content {{{ ---
> Bla bla bla bla bla
> <?php
> echo 'Hello world!';
>>
> Ho hum ho hum ho ho ho!
> <?php
> echo 'And goodbye cruel world!';
>>
> Fred på jord!
> --- }}} $content ---

Indeholder din variabel "<?php" ? Hvis du printer $content ud vil du se at
det tag er væk.
Prøv evt. at læse dit content fra en .txt fil i stedet...

> Så kører jeg den gennem:
> ereg($pattern, $content, $regs);
> for at få de matchede patterns over i $regs, hvori jeg så ville kunne
> finde: $regs[0] = $content;
> $regs[1] = "Bla bla bla bla bla\n";
> $regs[2] = "<?php\necho \'Hello world!\';\n?>";
> $regs[3] = "\nHo hum ho hum ho ho ho!\n";
> $regs[4] = "<?php\necho \'And goodbye cruel world!\';\n?>";
> $regs[5] = "\nFred på jord!";
>
> Problemet er bare at jeg ikke kan finde det rigtige pattern...

Det kan du ikke... Hvis du lave et match på noget, der ser således ud: <?php
en-masse-tegn ?> så vil hver forkomst af dette blive lagt til dit regs
array, og dette ville se således ud:

$regs[1] = "<?php echo 'Hello world!'; ?>";
$regs[2] = "<?php echo 'And goodbye cruel world!'; ?>"

> Lige nu har jeg '[(<\?php[^(\?>)]+\?>)]*' og det er mildest talt en
> fiasko...
> Jeg kan simpelthen ikke få den til at udskille _alle_
> (<\?php[^(\?>)]+\?>), kun den første eller sidste...

# utestet
eregi("(<\?php[a-z0-9 '\!;\n\r]+\?>)", $content, $regs);

Lad mig høre om det var sagen,,,

> Links, regexps, hvad som helst er velkomment... Dog vil jeg lige sige
> at jeg har læst en masse regex-manualler, men fatter stadig ikke en
> hat mere end jeg gjorde for 2 dage siden...

Mastering regular expressions fra O´reilly er _bogen_

--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Anders K. Madsen (17-06-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 17-06-03 06:05

Kim Emax wrote:
[snip]
>>Altså, hvis $content indeholder følgende:
>>--- $content {{{ ---
>>Bla bla bla bla bla
>><?php
>>echo 'Hello world!';
>>
>>Ho hum ho hum ho ho ho!
>><?php
>>echo 'And goodbye cruel world!';
>>
>>Fred på jord!
>>--- }}} $content ---
>
>
> Indeholder din variabel "<?php" ? Hvis du printer $content ud vil du se at
> det tag er væk.
> Prøv evt. at læse dit content fra en .txt fil i stedet...
>

Går ikke, den bliver allerede hentet fra MySQL.. :)
Sagen er den at jeg gerne vil implementere automagisk syntaks-highlight
af php-kode i mit forum... Således at når folk skriver et indlæg med
kodeeksempler (og husker at starte med <?php og slutte med ?>), så
skulle den syntaks-highlighte det med phps highlight_string().

>
>>Så kører jeg den gennem:
>>ereg($pattern, $content, $regs);
>>for at få de matchede patterns over i $regs, hvori jeg så ville kunne
>>finde: $regs[0] = $content;
>>$regs[1] = "Bla bla bla bla bla\n";
>>$regs[2] = "<?php\necho \'Hello world!\';\n?>";
>>$regs[3] = "\nHo hum ho hum ho ho ho!\n";
>>$regs[4] = "<?php\necho \'And goodbye cruel world!\';\n?>";
>>$regs[5] = "\nFred på jord!";
>>
>>Problemet er bare at jeg ikke kan finde det rigtige pattern...
>
>
> Det kan du ikke... Hvis du lave et match på noget, der ser således ud: <?php
> en-masse-tegn ?> så vil hver forkomst af dette blive lagt til dit regs
> array, og dette ville se således ud:
>
> $regs[1] = "<?php echo 'Hello world!'; ?>";
> $regs[2] = "<?php echo 'And goodbye cruel world!'; ?>"
>
>

I manualen står der:
    If matches are found for parenthesized substrings of pattern       
   and the function is called with the third argument regs, the
   matches will be stored in the elements of the array regs.
   $regs[1] will contain the substring which starts at the first
   left parenthesis; $regs[2] will contain the substring starting
   at the second, and so on. $regs[0] will contain a copy of the
   complete string matched.

Hvilket jeg forstår som om at min ide skulle kunne lade sig gøre...

>>Lige nu har jeg '[(<\?php[^(\?>)]+\?>)]*' og det er mildest talt en
>>fiasko...
>>Jeg kan simpelthen ikke få den til at udskille _alle_
>>(<\?php[^(\?>)]+\?>), kun den første eller sidste...
>
>
> # utestet
> eregi("(<\?php[a-z0-9 '\!;\n\r]+\?>)", $content, $regs);
>
> Lad mig høre om det var sagen,,,
>

Nope, det virker ligesom: eregi("(<\?php.*\?>)", $content, $regs);


[snip]
>
> Mastering regular expressions fra O´reilly er _bogen_
>

I know, jeg kan bare ikke lige få fat i den på nuværende tidspunkt da
jeg er meget langt fra alt der minder om penge og et anstændigt bibliotek...

Jeg har tænkt på en anden måde at gøre det på, men den virker heller
ikke efter hensigten... Se: http://www.webcafe.dk/debat/php/30585.html

Mvh.
   Madsen


Kim Emax (17-06-2003)
Kommentar
Fra : Kim Emax


Dato : 17-06-03 07:47

Anders K. Madsen wrote:

> Går ikke, den bliver allerede hentet fra MySQL.. :)
> Sagen er den at jeg gerne vil implementere automagisk
> syntaks-highlight af php-kode i mit forum... Således at når folk
> skriver et indlæg med kodeeksempler (og husker at starte med <?php og
> slutte med ?>), så skulle den syntaks-highlighte det med phps
> highlight_string().

ahaaa... men du kan evt. selv tilføje phps start og sluttags?


>>> $regs[4] = "<?php\necho \'And goodbye cruel world!\';\n?>";
>>> $regs[5] = "\nFred på jord!";

>> Det kan du ikke... Hvis du lave et match på noget, der ser således
>> ud: <?php en-masse-tegn ?> så vil hver forkomst af dette blive lagt
>> til dit regs array, og dette ville se således ud:
>>
>> $regs[1] = "<?php echo 'Hello world!'; ?>";
>> $regs[2] = "<?php echo 'And goodbye cruel world!'; ?>"
>>
>>
>
> I manualen står der:
> If matches are found for parenthesized substrings of pattern
> and the function is called with the third argument regs, the
> matches will be stored in the elements of the array regs.
> $regs[1] will contain the substring which starts at the first
> left parenthesis; $regs[2] will contain the substring starting
> at the second, and so on. $regs[0] will contain a copy of the
> complete string matched.
>
> Hvilket jeg forstår som om at min ide skulle kunne lade sig gøre...

Det kan det også, men kig lige på de 2 liner fra din posting, jeg har ladet
stå. Den ene starter med "<?php" og slutter med "?>", som du prøver at
matche, den anden gør det _ikke_. $regs indeholder, whatever, der er inden i
dine (), såfremt der er et match

>> # utestet
>> eregi("(<\?php[a-z0-9 '\!;\n\r]+\?>)", $content, $regs);
>>
>> Lad mig høre om det var sagen,,,
>>
>
> Nope, det virker ligesom: eregi("(<\?php.*\?>)", $content, $regs);

Jeg prøvede at matche, lige præcist de tegn, du havde angivet... Men jeg
tror dit problem er at printer du $content ud, så er "<?php" væk

>> Mastering regular expressions fra O´reilly er _bogen_
>>
>
> I know, jeg kan bare ikke lige få fat i den på nuværende tidspunkt da
> jeg er meget langt fra alt der minder om penge og et anstændigt
> bibliotek...

Det er nok, det første, der er dit problem. Vil ikke lige mene at et
bibliotek er uanstændigt, fordi de ikke har den bog, det er en temmelig
speciel viden, den indeholder

--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Anders K. Madsen (17-06-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 17-06-03 15:19

Kim Emax wrote:
> Anders K. Madsen wrote:
>
>
>>Går ikke, den bliver allerede hentet fra MySQL.. :)
>>Sagen er den at jeg gerne vil implementere automagisk
>>syntaks-highlight af php-kode i mit forum... Således at når folk
>>skriver et indlæg med kodeeksempler (og husker at starte med <?php og
>>slutte med ?>), så skulle den syntaks-highlighte det med phps
>>highlight_string().
>
>
> ahaaa... men du kan evt. selv tilføje phps start og sluttags?

Pointen er jo at den skulle gøre det automagisk, altså sådan at den bare
selv finder ud af hvor der er php-kode og så highlighter det...
Så man netop blev fri for [php][/php]-løsninger..

>>>>$regs[4] = "<?php\necho \'And goodbye cruel world!\';\n?>";
>>>>$regs[5] = "\nFred på jord!";
>
>
>>>Det kan du ikke... Hvis du lave et match på noget, der ser således
>>>ud: <?php en-masse-tegn ?> så vil hver forkomst af dette blive lagt
>>>til dit regs array, og dette ville se således ud:
>>>
>>>$regs[1] = "<?php echo 'Hello world!'; ?>";
>>>$regs[2] = "<?php echo 'And goodbye cruel world!'; ?>"
>>>
>>>
>>
>>I manualen står der:
>>If matches are found for parenthesized substrings of pattern
>>and the function is called with the third argument regs, the
>>matches will be stored in the elements of the array regs.
>>$regs[1] will contain the substring which starts at the first
>>left parenthesis; $regs[2] will contain the substring starting
>>at the second, and so on. $regs[0] will contain a copy of the
>>complete string matched.
>>
>>Hvilket jeg forstår som om at min ide skulle kunne lade sig gøre...
>
> Det kan det også, men kig lige på de 2 liner fra din posting, jeg har ladet
> stå. Den ene starter med "<?php" og slutter med "?>", som du prøver at
> matche, den anden gør det _ikke_. $regs indeholder, whatever, der er inden i
> dine (), såfremt der er et match
>
>
>>># utestet
>>>eregi("(<\?php[a-z0-9 '\!;\n\r]+\?>)", $content, $regs);
>>>
>>>Lad mig høre om det var sagen,,,
>>>
>>
>>Nope, det virker ligesom: eregi("(<\?php.*\?>)", $content, $regs);
>
> Jeg prøvede at matche, lige præcist de tegn, du havde angivet... Men jeg
> tror dit problem er at printer du $content ud, så er "<?php" væk

Nej da... "<?php" er der stadigvæk når jeg matcher med "(<\?php.*\?>)",
det forsvinder selvfølgelig når jeg matcher med "<\?php(.*)\?>", men den
bruger jeg heller ikke...

>>>Mastering regular expressions fra O´reilly er _bogen_
>>
>>I know, jeg kan bare ikke lige få fat i den på nuværende tidspunkt da
>>jeg er meget langt fra alt der minder om penge og et anstændigt
>>bibliotek...
>
> Det er nok, det første, der er dit problem. Vil ikke lige mene at et
> bibliotek er uanstændigt, fordi de ikke har den bog, det er en temmelig
> speciel viden, den indeholder
>

Ok, undskyld Herning Bibliotek...

Mvh.
   Madsen


Lars Friberg (18-06-2003)
Kommentar
Fra : Lars Friberg


Dato : 18-06-03 22:01

Kan du ikke bare bruge highlight_string() på det hele så bliver
teksten jo bare sort.
M:V:H
Lars Friberg

Anders K. Madsen (19-06-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 19-06-03 12:43

On Wed, 18 Jun 2003 14:00:52 -0700, Lars Friberg wrote:

> Kan du ikke bare bruge highlight_string() på det hele så bliver
> teksten jo bare sort.
> M:V:H
> Lars Friberg

Well, tanken har strejfet mig, men jeg ville gerne have at al den
tekst der ikke bliver highlightet, bliver vist med en ikke-
monospaced font, hvorimod al den tekst der highlightes jo
selvfølgelig skal være monospaced...
Og det dur highlight_string() altså ikke til... I hvert fald ikke
alene...

Mvh.
   Madsen

--
- - - - - - - - - - - - - - + - - - - - - - - - - - - - - +
| Anders K. Madsen
http://lillesvin.linux.dk |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| There are 10 types of people in the world... |
Those who understand binary - and those who don't.
| - http://bash.org |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +


Søg
Reklame
Statistik
Spørgsmål : 177502
Tips : 31968
Nyheder : 719565
Indlæg : 6408538
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste