Markus: Regulärer Ausdruck

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

  1. So habs doch noch hinbekommen mit

    preg_replace("/(.*)>([^-]+) - /", "$1>" ,$str);

    1. 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

      --
      bythewaythewebsuxgoofflineandenjoytheday
      1. Das hier sollte es auch tun.
        preg_replace("/>[^-]+ - /", ">" ,$str);

        Du hast recht, funktioniert auch so.

        Gruß Markus

  2. 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

    --
    bythewaythewebsuxgoofflineandenjoytheday