gudn tach!
$text = preg_replace("/([html])(.*?)([/html])/ise",
Wenn du z.B. ~ als Begrenzer nimmst, musst du den / in [/html] nicht maskieren.
richtig (ich nehm trotzdem fast immer das '/', um nicht umdenken zu muessen).
'"\1".str_replace("\n","","\2")."\3"', $text);[/code]
Das Handbuch empfiehlt nicht \1 sondern $1 zu verwenden.
normalerweise mache ich mehr mit perl und von dort kenne ich die $-bevorzugung, welche auch tatsaechlich im handbuch steht. deshalb habe ich extra mal vor einiger zeit auf http://de.php.net/manual/en/reference.pcre.pattern.syntax.php geschaut, ob da was zu steht, aber dort ist nur von \1 die rede. deswegen verwendete ich das backslash.
wo steht das mit $1?
$text = preg_replace("/([html])(.*?)([/html])/ise", '"\1".str_replace(array("\n","\r"),array("",""),"\2")."\3"', $text);[/code].
der zweite Parameter von preg_replace darf auch ein String sein wenn der erste ein Array ist.
oh, gut. vermutet habe ich es, war aber zu faul nachzuschlagen.
aber wenn wir nun schon an feinheiten sind... fuer's archiv:
mit zero-width positive look-ahead und look-behind-assertions, die ich hier nicht erklaeren moechte, sondern bloss auf perldoc perlre bzw. auf php.net/... hinweise, saehe das dann z.b. so aus:
$text = preg_replace("/(?<=\[html\])(.+?)(?=\[\/html\])/ise", 'str_replace(array("\n","\r"),"","\1")', $text);
oh, gut, dass ich das vorher mal schnell ausprobiert habe, denn es wirft fuer mich eine frage auf:
#!/usr/bin/perl -w
use strict;
my $text='abc';
print $text."\n";
$text=~s/(?<=a).*(?=c)/x/;
print $text."\n";
gibt aus:
abc
axc
<?php
$text='abc';
echo $text."\n";
$text = preg_replace('/(?<=a).*(?=c)/', 'x', $text);
echo $text."\n";
?>
gibt aus:
abc
abc
es wird also in php nix gematcht.
warum?
wenn man .* durch .+ ersetzt, funzts uebrigens in beiden (wie in perl).
prost
seth