"We are back" « oc.at

Regulärer Ausdruck / String Replace

moidaschl 17.08.2005 - 10:54 497 5
Posts

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
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)

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 ;). Sollte jemand eine einfachere andere lösung kennen bitte mir diese mitzuteilen ;)

besten dank im voraus
moidaschl
Bearbeitet von moidaschl am 17.08.2005, 11:30

malu

Big d00d
Avatar
Registered: Aug 2005
Location: vienna/ooe
Posts: 206
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
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
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

Legend
waffle, waffle!
Avatar
Registered: Jan 2004
Location: wien
Posts: 794
die BBcodes werden normalerweise mit folgender funktion rausgeparst. wie du siehst, checkt er vier möglichkeiten, wie eine URL aussehen kann:


Code:
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
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
oha!

hab ich doch gwusst dass ich da einen fixen regex brauche :D

danke rettich ich werd den mal übernehmen und an meine bedürfnisse anpassen (wohlgemerkt nur den replace teil :D :D)

regex san eine geschichte für sich, dass muss ich mir mal aneignen :)

thx!

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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 ;)


edit:mist, zu lahm :(
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz