PDA

Vollstndige Version anzeigen : "gierige" regex ausdrcke


theripper8472
01-05-2002, 18:31
mein problem ist folgendes:

<?php

$str="XaYbZ XcYdZ";

$str=eregi_replace("X(.*)Y(.*)Z", "[1-2]", $str);

echo $str;

// tatschliche Ausgabe: [aYbZ Xc-d]
// gewollte Ausgabe: [a-b] [c-d]


?>


kurz:
das suchmuster sucht nicht nach dem nchsten vorkommen von Y, sondern nach dem letzten.

wie kann ich das so einschrnken, dass das nchste Y gesucht wird, und dann auch das nchste Z???

FloRos
01-05-2002, 19:47
fr eine Ausgabe haben.

Sollen alle X oder Y oder Z durch [-] ersetzt werden??

Flo

ingo
01-05-2002, 20:09
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 zurckgeben lassen und dann damit genauso oft die for-schleife durchlaufen

lg, ingo

theripper8472
01-05-2002, 20:54
ist nicht ganz, was ich suche...

ich suche jemanden, der sich mit regulren ausdrcken auskennt.

sonst wre 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 nchste vorkommende zeichen lenkt!!!

ingo
01-05-2002, 23:49
nicht so freundlich. das hier ist kein forum fr dich allein. sei froh wenns leute gibt, die versuchen dir zu helfen.

lg, ingo

|Coding
02-05-2002, 00:15
Original geschrieben von ingo
nicht so freundlich. das hier ist kein forum fr 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
02-05-2002, 00:27
die preg Funktionen enthalten Modifizierer die dieses Fnomchen (richtig?) beheben, ich glaube es ist der U Modifier

ingo
02-05-2002, 00:36
phnomenchen ;-)
aber tschuldigung. darum gehts ja eigentlich gar nicht.
lg, ingo

theripper8472
02-05-2002, 01:38
tschuldigung, wenn ich so grob war, aber es ist wirklich dringend!

ich denke mal, dieses phnomnchen 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 einschrnken: nicht das letzte vorkommen von irgendetwas im suchmuster soll gemeint sein, sondern das nchste.

und was ich dort oben als php gepostet habe, ist nur ein beispiel, was mein problem verdeutlicht/vereinfacht.

ingo
02-05-2002, 05:30
vllig legitim. wrd ich sagen.
lg, ingo

Nev
02-05-2002, 11:02
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, 21:09
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

ingo
02-05-2002, 21:36
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 htte $str den wert [aYbZ Xc-d].

lg, ingo

theripper8472
02-05-2002, 22:57
das ist es!!!

ich muss zwar nurnoch von eregi-replace auf preg_replace umsatteln, aber mein problem ist gelst!!!

theripper8472
02-05-2002, 23:40
<?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 zerstckelt, 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 ("

","&nbsp;<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 zerstckeln, damits im forum funzt

// *** ERASE BACKSLASHES FROM PROTECTED CHARS ***
$prevent=stripcslashes($prevent);
?>



Das ist meine "prevent.php" mit der ich alle gb eintrge filtere und formatierbar mache!!
Als dank fr die fruchtbare hilfe gibts das fertige Produkt FREE!!!

Progman
03-05-2002, 17:19
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(); enthlt einen Optionalen Parameter der angibt, welche HTML-Tags erlaubt werden sollen.

theripper8472
03-05-2002, 22:39
dummerweise kann nicht jeder html und auerdem sind diese tags vereinfacht, damit sie jeder nutzen kann

und auerdem ist in selfphp keine beschrebung zu preg_...
nur zu ereg_...
und ich denke, die sind etwas unterschiedlich

gray
09-05-2002, 23:23
Wenn eben Leute auf eine Site kommen, die nicht so in HTML bewandt sind, muss man die eben darauf hinweisen wie formatiert werden soll.

Aber es gitb doch auch schon solche Foren, ... bei denen man einfach auf einen Link klickt und die ganze Idee fgt sich dann von alleine ein!

Kennt sich jemand mit sowas aus und kann mal sowas zusammen basteln?

THX!

theripper8472
10-05-2002, 00:10
<script language="JavaScript"><!--
function xinsert(what) {
document.einformular.eingabefeld.value= document.einformular.eingabefeld.value+what;
}
// --></script>


<a href="javascript:xinsert('irgendein text');">fge mich ein!!!</a>

<form name=einformular>
<input type=text name=eingabefeld>
</form>


so hnlich