[php] preg_replace (- Ik word/ben gek)

Pagina: 1
Acties:
  • 95 views sinds 30-01-2008

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
ik snap het niet hoor :'(
ik heb deze code
PHP:
1
2
3
4
5
<?
$s = "[php1] CODE [/php1] Geen code";
$s = preg_replace('_\\[php1\](.*)\\[/php1\]_iUs',highlight_string('<? \\1 ?>'), $s);
echo "$s";
?>

en dan zie ik dit
code:
1
2
3
<? 
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in f:\homepage\cb\submit.php on line 3
1 ?> 1 Geen code

zal wel een eitje zijn om optelossen maar ik ben al de heledag aan het utfs'en om het werkent te krijgen :(

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

wees aardig voor razor-x

dit was het laatste wat ie schreef voor ie dit topic opende
You have received a message!
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA
Ik word/ben GEK !!!!
hij ziet um niet
* D2k houdt zich helaas niet met regexp bezig en kan um dus niet helpen

Doet iets met Cloud (MS/IBM)


  • Grum
  • Registratie: Juni 2001
  • Niet online
is _ wel een valid delim ?

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Op maandag 13 augustus 2001 20:19 schreef Grum_ het volgende:
is _ wel een valid delim ?
ookal haal ik die weg dan doet hij het niet :(

kan anders ff online met icq als je wilt helpen

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Op maandag 13 augustus 2001 20:36 schreef tomato het volgende:
www.php.net/highlight-string

Tip:

www.php.net/outcontrol

:)
;( zoek al de heledag maar het kwartje valt niet
kan je echt geen directe tips geven?

;( :'( :(

  • tomato
  • Registratie: November 1999
  • Niet online
Op maandag 13 augustus 2001 20:38 schreef razor-x het volgende:
;( zoek al de heledag maar het kwartje valt niet
kan je echt geen directe tips geven?
bool highlight_string (string str)


The highlight_string() function prints out a syntax highlighted version of str using the colors defined in the built-in syntax highlighter for PHP. Returns TRUE on succes, FALSE on failure.
En dan kun je nog verder lezen:
Tip: As with anything that outputs its result directly to the browser, you can use the output-control functions to capture the output of this function, and save it - for example - in a string.
Wat lukt er niet? :)

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
als ik
PHP:
1
2
3
<?
highlight_string("<? \\1 ?>");
?>

doe dan geeft hij de zelfde fout :(

Maar tomato ik ga weer eens kijken maar ik heb er weinig vertrouwen in dat het lukt aangezien dat ik al van af vanochtend bezig ben :(
Ik snap ook niet waarom het zo moeilijk moet ?
Is die parser nou echt zo dom dat hij dat niet snapt sjeesh :P

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op maandag 13 augustus 2001 20:59 schreef tomato wat
En nog afgezien daarvan kun je functies niet op die manier als replacement gebruiken. Wat deze code doet is "highlight_string('<? \\1 ?>'" evalueren, en de uitkomst ervan vervolgens als replacement voor elke match gebruiken. Dat is niet wat je wilt.

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Op maandag 13 augustus 2001 21:07 schreef Onno het volgende:

[..]

En nog afgezien daarvan kun je functies niet op die manier als replacement gebruiken. Wat deze code doet is het resultaat van "highlight_string('<? \\1 ?>'" als replacement gebruiken, en dat is niet wat je wilt.
Waarom wil ik dat niet gebruiken dan?

en hoe wil ik het dan wel ???

Hoe meer ik over dit ga nadenken hoe minder ik hier van snap |:( ;(

  • tomato
  • Registratie: November 1999
  • Niet online
Ok, ik zal even uitleggen wat er mis gaat. Ten eerste:
PHP:
1
2
3
<?
$s = preg_replace('_\\[php1\](.*)\\[/php1\]_iUs',highlight_string('<? \\1 ?>'), $s);
?>

Dat gaat niet lukken. Je kunt niet op deze manier je matches door een functie laten bewerken. Wat je wilt is de /e modifier gebruiken, of de functie preg_replace_callback (wat in principe op hetzelfde neerkomt en ik dus ook een heel stomme en overbodige functie vind |:( ).

Je zou dan zoiets als dit krijgen:
PHP:
1
2
3
<?
$s = preg_replace('_\\[php1\](.*?)\\[/php1\]_ise', "highlight_string('<? \\1 ?>')", $s);
?>

Alleen een probleem: als we de functie highlight_string nog even in de docs gaan bekijken:
The highlight_string() function prints out a syntax highlighted version of str...
En dat willen we niet, we willen natuurlijk de gehighlighte string terugkrijgen om te gebruiken, niet direct op het scherm.
Dit kun je bereiken met output buffering functies; start buffering, voer de functie uit, lees het buffer uit, stop buffering. Zoiets dus:
PHP:
1
2
3
4
5
6
<?
ob_start();
highlight_string($s);
$s = ob_get_contents();
ob_end_clean();
?>

Maar dit is niet zo makkelijk om direct aan te spreken vanuit onze regex. Zet dir daarom in een functie (bijv de functie 'geefkleurtjes($string)' en roep die functie aan in je regex.

:)

  • tomato
  • Registratie: November 1999
  • Niet online
Op maandag 13 augustus 2001 21:07 schreef Onno het volgende:
En nog afgezien daarvan kun je functies niet op die manier als replacement gebruiken. Wat deze code doet is "highlight_string('<? \\1 ?>'" evalueren, en de uitkomst ervan vervolgens als replacement voor elke match gebruiken. Dat is niet wat je wilt.
Pcies, ik had nog niet eens gekeken naar z'n regex functie :)
En ik tikte nu te langzaam :(

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Tomato , wat moet de wereld (en n00b) zonder jou :D , ik ga het gelijk probeeren :)

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Maar dit is niet zo makkelijk om direct aan te spreken vanuit onze regex. Zet dir daarom in een functie (bijv de functie 'geefkleurtjes($string)' en roep die functie aan in je regex.
Ok maar als je dat dus doet krijg je dit :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$s = "<? [php1] CODE [/php1] ?> Geen code ";
$s = preg_replace('_\\[php1\](.*)\\[/php1\]_iUs',phphighlite('\\1'), $s);

function phphighlite($code) {

ob_start();
highlight_string($code);
$code = ob_get_contents();
ob_end_clean();
echo("$code");
}

echo "$s";
?>

maar dan geeft hij
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in f:\homepage\cb\submit.php on line 4

en anders
geeft hij \1 als code (zonder kleurtjes)

ps. Sorry als ik hier nou heel stom aan het doen ben hoor ;(

  • tomato
  • Registratie: November 1999
  • Niet online
Op maandag 13 augustus 2001 21:27 schreef razor-x het volgende:
Ok maar als je dat dus doet krijg je dit :
Nope, lees het eerste stukje in m'n reply nog eens :)

[edit]
Wat Onno dus ook zegt.

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 15-09 19:23

WoutF

Hoofdredacteur
Op maandag 13 augustus 2001 21:27 schreef razor-x het volgende:

[..]

Ok maar als je dat dus doet krijg je dit :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$s = "<? [php1] CODE [/php1] ?> Geen code ";
$s = preg_replace('_\\[php1\](.*)\\[/php1\]_iUs',phphighlite('\\1'), $s);

function phphighlite($code) {

ob_start();
highlight_string($code);
$code = ob_get_contents();
ob_end_clean();
echo("$code");
}

echo "$s";
?>

maar dan geeft hij
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in f:\homepage\cb\submit.php on line 4

en anders
geeft hij \1 als code (zonder kleurtjes)

ps. Sorry als ik hier nou heel stom aan het doen ben hoor ;(
Ik ben dus echt een volslagen n00b maar volgens mij moet je eerst die regex eroverheen gooien en dan de highlight_string zooi

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Op maandag 13 augustus 2001 21:35 schreef woutf het volgende:

[..]

Ik ben dus echt een volslagen n00b maar volgens mij moet je eerst die regex eroverheen gooien en dan de highlight_string zooi
Ben ik nou zo gek of doe ik dat ook??

Maar tomato ik snap het niet (ligt niet aan jou hoor :D )
Ik blijf gewoon het zelfde houden , ik heb nu dit
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function kleur($code) {
ob_start();
highlight_string("<?" .$code. "?>");
$code = ob_get_contents();
ob_end_clean();
echo("$code");
}

$s = "[php1] CODE [/php1] Geen code ";
$s = preg_replace('_\\[php1\](.*?)\\[/php1\]_ise',kleur('\\1'), $s);

echo "$s";
?>

  • tomato
  • Registratie: November 1999
  • Niet online
Op maandag 13 augustus 2001 21:44 schreef razor-x het volgende:
Maar tomato ik snap het niet (ligt niet aan jou hoor :D )
Nee, gelukkig niet :P
Ik blijf gewoon het zelfde houden , ik heb nu dit
Dat is niet goed. Kijk hier eens naar:
PHP:
1
2
3
<?
$s = preg_replace('_\\[php1\](.*?)\\[/php1\]_ise', "kleur('<? \\1 ?>')", $s);
?>

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
WH000000000000000T B-)
Yeah!
hij werkt *D
Thx tomato ;)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function kleur($code) {
ob_start();
highlight_string($code);
$code = ob_get_contents();
ob_end_clean();
return $code;
}

$s = "[php1] CODE [/php1] Geen code ";
$s = preg_replace('_\\[php1\](.*?)\\[/php1\]_ise', "kleur('<? \\1 ?>')", $s);

echo("$s");
?>

* razor-x is weer een gelukkig jongentje

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

hehehe
dan valt ie mij er iig niet meer mee lastig >:)

Doet iets met Cloud (MS/IBM)


  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Nog een vraag:

Ik gebruikt de code van 2 posts hoger maar
hij werkt niet perfect ;(
Als ik dan een mooie script tussen
[php1] en [\php1]

1) Hij maakt erhelemaal niet zulke mooie kleurtjes zo als hier op got van?

2) Hij zet er nog allerlijk \ bij? ook als ik de comando stripslashes doe ?

3) Ik krijg soms nog gewoon een error
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in f:\homepage\cb\submit.php on line 5

Wat ik zelf behoorlijk vaag vind , iemand id'en ?

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op maandag 13 augustus 2001 21:17 schreef tomato het volgende:
Wat je wilt is de /e modifier gebruiken, of de functie preg_replace_callback (wat in principe op hetzelfde neerkomt en ik dus ook een heel stomme en overbodige functie vind |:( ).
In Perl zou zo'n callback constructie overbodig zijn ja, maar in PHP zeker niet. Omdat $1, $&, enz. in PHP geen variabelen zijn, maar alleen maar patroontjes die binnen de replacement string vervangen worden kun je snel een hoop problemen krijgen met quotes/escapen. Stel, je wilt iets door de functie blaat gooien:
code:
1
preg_replace("/.../e","blaat('$1')", ...)

Nou heb je een probleem als $1 een ' bevat. Als $1 gewoon een variabele was, had je "blaat(\$1)" kunnen doen, en was en geen probleem geweest. Maar ja. PHP.

De callback variant lost dit op.

Verwijderd

Op maandag 13 augustus 2001 22:43 schreef razor-x het volgende:
Nog een vraag:

Ik gebruikt de code van 2 posts hoger maar
hij werkt niet perfect ;(
Als ik dan een mooie script tussen
[php1] en [\php1]

1) Hij maakt erhelemaal niet zulke mooie kleurtjes zo als hier op got van?

Mark-Z: Das weird, zal wel moeten namelijk...

2) Hij zet er nog allerlijk \ bij? ook als ik de comando stripslashes doe ?

MARK-Z: Gebruik stripslashes wel op de goede manier:

stripslashes($var); // want dan werkt die bij mij in iede rgeval wel...

3) Ik krijg soms nog gewoon een error
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in f:\homepage\cb\submit.php on line 5

Wat ik zelf behoorlijk vaag vind , iemand id'en ?

MARK-Z: Zie 2.

  • Grum
  • Registratie: Juni 2001
  • Niet online
wtf is dit nou weer voor een post mark ? :)

  • tomato
  • Registratie: November 1999
  • Niet online
Op zaterdag 13 oktober 2001 14:56 schreef Grum_ het volgende:
wtf is dit nou weer voor een post mark ? :)
Zin om mensen een fijne dag te bezorgen? Kan hij beter in de horeca gaan werken :+


[edit]
Dacht even dat hij iemand wilde helpen met een probleem van 14 maanden geleden (ben beetje blind), maar bleken toch maar 2 maanden te zijn :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sja, tomato sais it all :+

Nah goed. De vraag was ondertussen wel een beetje beantwoord en als razor-x nog met dat probleem zat had ie het zelf wel omhoog geschopt...

Dit topic is 2 maanden oud....
Pagina: 1

Dit topic is gesloten.