Regulärer Ausdruck / String Replace
moidaschl 17.08.2005 - 10:54 497 5
moidaschl
Vollzeit-Hackler
|
Mahlzeit! Ich habe mich noch nicht wirklich mit den regex beschäftigt (und bin bis jetzt gut drumherum gekommen), allerdings bräuchte ich einen Ausdruck und der ist mir zu kompliziert. Hier einmal die Problemstellung: Sagen wir mein string kommt, wie hier im Forum, so herein: [.url=www.google.at]Descr.[/url] (der kleine punkt, sonst parsed er es ja gleich ![:D](/images/smilies/biggrin.gif) ) ich möchte ausdem so einen string machen: <a href="www.google.at">Descr.</a> das hintere [/url] kann ich sehr leicht mit str_ireplace in das </a> verwandeln aber mir will nicht wirklich eingehen wie ich aus dem vorderen teil die url herausfiltere (substr !?)! Das nächste Problem ist dann die Description, aber die werd ich ja wohl lassen können wenn dann vorne und hinten eh die html tags sind. Also kann mir wer schnell einen Regex zusammenzimmern um die URL auszulesen? Sollte der zu kompliziert sein muss ich mich wohl oder übel jetzt sofort damit auseinander setzen, aber die dinger sind mir nicht so geheuer ![;)](/images/smilies/wink.gif) . Sollte jemand eine einfachere andere lösung kennen bitte mir diese mitzuteilen ![;)](/images/smilies/wink.gif) besten dank im voraus moidaschl
Bearbeitet von moidaschl am 17.08.2005, 11:30
|
malu
Big d00d
|
ich würd dazu strcut verwenden. also einfach vorne so viele zeichen wegschneiden, bis die url beginnt! die anzahl der zeichen vor der url ist eh immer die selbe!
hth, mlu
|
moidaschl
Vollzeit-Hackler
|
ja nur wie weiß ich dann wann die url aus ist? weil ich muss ja hinten die eckige klammer auch wieder zu einer eckigen machen. ausserdem will ich das ja in der ereg_replace funktion unterbringen, ich hab ja nicht nur eine URL in meinem textstring
|
rettich
Legendwaffle, waffle!
|
die BBcodes werden normalerweise mit folgender funktion rausgeparst. wie du siehst, checkt er vier möglichkeiten, wie eine URL aussehen kann: function bbcode($bbcode)
{
$search = array(
"/(\[)(url)(=)(['\"]?)(www\.)([^\"']*)(\\4)(.*)(\[\/url\])/siU",
"/(\[)(url)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/url\])/siU",
"/(\[)(url)(\])(www\.)([^\"]*)(\[\/url\])/siU",
"/(\[)(url)(\])([^\"']*)(\[\/url\])/siU");
$replace = array(
"<a href=\"http://www.\\6\" target=\"_blank\">\\8</a>",
"<a href=\"\\5\" target=\"_blank\">\\7</a>",
"<a href=\"http://www.\\5\" target=\"_blank\">\\5</a>",
"<a href=\"\\4\" target=\"_blank\">\\4</a>");
$bbcode = preg_replace($search, $replace, $bbcode);
$bbcode = nl2br($bbcode);
return $bbcode;
}
|
moidaschl
Vollzeit-Hackler
|
oha! hab ich doch gwusst dass ich da einen fixen regex brauche ![:D](/images/smilies/biggrin.gif) danke rettich ich werd den mal übernehmen und an meine bedürfnisse anpassen (wohlgemerkt nur den replace teil ![:D](/images/smilies/biggrin.gif) ) regex san eine geschichte für sich, dass muss ich mir mal aneignen ![:)](/images/smilies/smile.gif) thx!
|
watchout
Legendundead
|
Solltest dich aber echt damit auseinandersetzen - ist ne mächtige Sache... Ich nehme mal an die Sache bezieht sich auf PHP. "/\[url(=[^\]]?)\]([^\[])\[\/url\]/ie" sollte der Pattern sein (hoffe ich hab kein fehler gemacht, kann grad nicht testen, aber die andern werden mich wahrscheinlich eh ausbessern...) es sieht eigentlich komplizierter aus als es ist... "'<a href="\\1">'.('\\1'?'\\2':'\\1').'</a>'" das ganze in ein preg_replace hth ![;)](/images/smilies/wink.gif) edit:mist, zu lahm
|