Archiv verlassen und diese Seite im Standarddesign anzeigen : "gierige" regex ausdrücke
theripper8472
01.05.2002, 17:31:09
mein problem ist folgendes:
<?php
$str="XaYbZ XcYdZ";
$str=eregi_replace("X(.*)Y(.*)Z", "[1-2]", $str);
echo $str;
// tatsächliche Ausgabe: [aYbZ Xc-d]
// gewollte Ausgabe: [a-b] [c-d]
?>
kurz:
das suchmuster sucht nicht nach dem nächsten vorkommen von Y, sondern nach dem letzten.
wie kann ich das so einschränken, dass das nächste Y gesucht wird, und dann auch das nächste Z???
FloRos
01.05.2002, 18:47:42
für eine Ausgabe haben.
Sollen alle X oder Y oder Z durch [-] ersetzt werden??
Flo
in eine for-schleife einbauen.
dann wirds nicht nur einmal, sondern so oft wie angegeben ersetzt.
du kannst dir ja beispielsweise zuerst die anzahl der Y im string zurückgeben lassen und dann damit genauso oft die for-schleife durchlaufen
lg, ingo
theripper8472
01.05.2002, 19:54:08
ist nicht ganz, was ich suche...
ich suche jemanden, der sich mit regulären ausdrücken auskennt.
sonst wäre es sinnlos, es zu versuchen.
das ist ein reines regex problem!!!
ich will einen regex "parameter" der das replace nicht auf das letzte vorkommende zeichen sondern auf das nächste vorkommende zeichen lenkt!!!
nicht so freundlich. das hier ist kein forum für dich allein. sei froh wenns leute gibt, die versuchen dir zu helfen.
lg, ingo
|Coding
01.05.2002, 23:15:18
Original geschrieben von ingo
nicht so freundlich. das hier ist kein forum für dich allein. sei froh wenns leute gibt, die versuchen dir zu helfen.
lg, ingo
genau meine meinung... ein hitzkopf bringt in einem forum, wo man sich gegenseitig hilf, überhaupt nix.
Progman
01.05.2002, 23:27:57
die preg Funktionen enthalten Modifizierer die dieses Fänomächen (richtig?) beheben, ich glaube es ist der U Modifier
phänomenchen ;-)
aber tschuldigung. darum gehts ja eigentlich gar nicht.
lg, ingo
theripper8472
02.05.2002, 00:38:47
tschuldigung, wenn ich so grob war, aber es ist wirklich dringend!
ich denke mal, dieses phänomänchen ist es.
mein problem ist ganz allein mit diesen regex teilen!
im selfhtml unter cgi/perl steht auch sowas, dass diese regex funktionen recht gierig wildkards ausnutzen.
ich will das einschränken: nicht das letzte vorkommen von irgendetwas im suchmuster soll gemeint sein, sondern das nächste.
und was ich dort oben als php gepostet habe, ist nur ein beispiel, was mein problem verdeutlicht/vereinfacht.
völlig legitim. würd ich sagen.
lg, ingo
Hi @ll
in CGI schaut das ganze so aus:
$wert = "XaYbZ XcYdZ";
$wert =~ s/X/[/g;
$wert =~ s/Z/]/g;
$wert =~ s/Y/-/g;
Hoffe ich konnte weiterhelfen
theripper8472
02.05.2002, 20:09:52
in CGI schon...
so hab ich`s in PHP aber noch nicht gesehen.
aber danke
ich werd mich mal an den webmaster dieses forums wenden, der hat das rad ja schon erfunden
hi, hab mir das jetzt mal angeschaut:
$str="XaYbZ XcYdZ";
$str=preg_replace("/X(.*)Y(.*)Z/U", "[1-2]", $str);
echo $str;
ohne das U hätte $str den wert [aYbZ Xc-d].
lg, ingo
theripper8472
02.05.2002, 21:57:05
das ist es!!!
ich muss zwar nurnoch von eregi-replace auf preg_replace umsatteln, aber mein problem ist gelöst!!!
theripper8472
02.05.2002, 22:40:13
<?php
// *** USE ***
// $prevent=$xparam;
// include("prevent.php");
// $xparam=$prevent;
// *** ALLOWED TAGS ***
$replace = array (
"<b>" => "",
"</b>" => "",
"<i>" => "",
"</i>" => "",
"<u>" => "",
"</u>" => "",
"<s>" => "",
"</s>" => "",
"<center>" => "",
"</center>" => "",
"<blockquote>" => "[qu ote]",
"</blockquote>" => "[/quo te]",
// das q u o t e hier ebenfalls zerstückelt, damits das forum kapiert
"<pre>" => "",
"</pre>" => ""
);
$prevent = strtr($prevent, $replace);
// *** DISABLE HTML ***
$prevent=htmlentities($prevent); //disables all html tags
// *** "cr lf" CONVERT ***
$prevent = eregi_replace ("
"," <p>",$prevent);
$prevent = eregi_replace ("
","<br>",$prevent);
// *** CONVERT BRACKET CODE ***
//LINKS 'N' IMAGES
$prevent = preg_replace ("/(.*)[=xlink](.*)/U","<a href="1" title="1">2</a>",$prevent);
$prevent = preg_replace ("/(.*)[=link](.*)/U","<a href="1" target=_new title="1">2</a>",$prevent);
$prevent = preg_replace ("/(.*)/U","<a href="1" target=_new title="1">1</a>",$prevent);
$prevent = preg_replace ("/(.*)/U","<img src="1" title="1">",$prevent);
//TEXT STYLES
$prevent = preg_replace ("/(.*)/U","<b>1</b>",$prevent);
$prevent = preg_replace ("/(.*)/U","<i>1</i>",$prevent);
$prevent = preg_replace ("/(.*)/U","<center>1</center>",$prevent);
$prevent = preg_replace ("/(.*)/U","<div align=right>1</div>",$prevent);
$prevent = preg_replace ("/(.*)/U","<div align=justify>1</div>",$prevent);
$prevent = preg_replace ("/(.*)/U","<s>1</s>",$prevent);
$prevent = preg_replace ("/(.*)/U","<u>1</u>",$prevent);
$prevent = preg_replace ("/(.*)/U","<font color=white>1</font>",$prevent);
$prevent = preg_replace ("/(.*)/U","<pre>1</pre>",$prevent);
$prevent = preg_replace ("/[ quo te](.*)[/q uo te]/U","<blockquote>1</blockquote>",$prevent); // achtung!!! hier musste ich das quote etwas zerstückeln, damits im forum funzt
// *** ERASE BACKSLASHES FROM PROTECTED CHARS ***
$prevent=stripcslashes($prevent);
?>
Das ist meine "prevent.php" mit der ich alle gb einträge filtere und formatierbar mache!!
Als dank für die fruchtbare hilfe gibts das fertige Produkt FREE!!!
Progman
03.05.2002, 16:19:01
preg_replace kann auch ein Array erwarten, also warum schreibst du nicht alles in ein Array und übergibs das? Und warum benutzt du überhaupt solche komischen Codes?
strip_tags(); enthält einen Optionalen Parameter der angibt, welche HTML-Tags erlaubt werden sollen.
theripper8472
03.05.2002, 21:39:29
dummerweise kann nicht jeder html und außerdem sind diese tags vereinfacht, damit sie jeder nutzen kann
und außerdem ist in selfphp keine beschrebung zu preg_...
nur zu ereg_...
und ich denke, die sind etwas unterschiedlich
theripper8472
09.05.2002, 23:10:55
<script language="JavaScript"><!--
function xinsert(what) {
document.einformular.eingabefeld.value= document.einformular.eingabefeld.value+what;
}
// --></script>
<a href="javascript:xinsert('irgendein text');">füge mich ein!!!</a>
<form name=einformular>
<input type=text name=eingabefeld>
</form>
so ähnlich
vBulletin® v3.8.3, Copyright ©2000-2012, Jelsoft Enterprises Ltd.