Regulärer Ausdruck
Markus
- php
Hey,
ich hab bspw diesen String:
<div class='index_html_item_title'><a href='/projekte/esearch/' class='index_html_item_title'>Projekte - eSearch</a></div>
mithilfte des von preg_replace entferne ich vorne das Projekte:
$str = preg_replace("/(.*)>(.*) - /", "$1>" ,$str);
Nun kommt es aber auch vor dass der String so aussieht:
<div class='index_html_item_title'><a href='/artikel/url_design_2/' class='index_html_item_title'>Artikel - Alternative URL-Designs machen die Website übersichtlicher - Teil 2</a></div>
Hier kommt " - " 2x vor, er soll aber nur 1x das " - " entfernt werden, also das vordere.
Ich habe es bereits mit Limit 1 versucht:
preg_replace("/(.*)>(.*) - /", "$1>" ,$str ,1);
aber das funktioniert nicht. Der Strich wird trotzdem entfernt.
PHP version ist 4.4.4
Ich bin leider nicht so fit in den regulären Ausdrücken, dass ich das hinbekomme.
Hoffe ihr könnt mir helfen,
Gruß Markus
So habs doch noch hinbekommen mit
preg_replace("/(.*)>([^-]+) - /", "$1>" ,$str);
Huhu
So habs doch noch hinbekommen mit
gut
preg_replace("/(.*)>([^-]+) - /", "$1>" ,$str);
Die erste Klammer ist aber überflüssig oder irre mich?
Das hier sollte es auch tun.
preg_replace("/>[^-]+ - /", ">" ,$str);
Viele Grüße
lulu
Das hier sollte es auch tun.
preg_replace("/>[^-]+ - /", ">" ,$str);
Du hast recht, funktioniert auch so.
Gruß Markus
Huhu Markus,
ich hab bspw diesen String:
<div class='index_html_item_title'><a href='/projekte/esearch/' class='index_html_item_title'>Projekte - eSearch</a></div>mithilfte des von preg_replace entferne ich vorne das Projekte:
$str = preg_replace("/(.*)>(.*) - /", "$1>" ,$str);
Nun kommt es aber auch vor dass der String so aussieht:
<div class='index_html_item_title'><a href='/artikel/url_design_2/' class='index_html_item_title'>Artikel - Alternative URL-Designs machen die Website übersichtlicher - Teil 2</a></div>Hier kommt " - " 2x vor, er soll aber nur 1x das " - " entfernt werden, also das vordere.
Ich habe es bereits mit Limit 1 versucht:preg_replace("/(.*)>(.*) - /", "$1>" ,$str ,1);
aber das funktioniert nicht. Der Strich wird trotzdem entfernt.
Das Suchmuster versucht standardmäßig so viele Zeichen wie möglich zu erfassen.
Das zweite ".*" in Deinem Ausdruck frisst den ersten Strich, und der Strich den zweiten Strich.
Helfen könnte hier ein Modifier U für ungreedy.
Dann hättest Du
preg_replace("/(.*)>(.*) - /U", "$1>" ,$str ,1);
Soll diese Ersetzung nur einmal gemacht werden oder bei jedem Seitenaufruf erneut?
Falls letzteres der Fall ist wäre da noch Verbesserungspotential in diesem Ausdruck.
Viele Grüße
lulu