tester: negativer ausdruck für preg_match

moin

gerne würde ich in einem string einen ausdruck ersetzen lassen unter der bedingung, dass er sich nicht zwischen 2 bestimmten anderen ausdrücken befindet.
als einfaches beispiel:
$str="abc (def) geh";
==[Ersetzen von "e" mit "E", wenn nicht zwischen ( und )]==>
$neuer_string=$str="abc (def) gEh";
und nicht so:
$falscher_neuer_string=$str="abc (dEf) gEh";

danke für hilfreiche postings...

  1. hallö tester,

    gerne würde ich in einem string einen ausdruck ersetzen lassen unter der bedingung, dass er sich nicht zwischen 2 bestimmten anderen ausdrücken befindet.

    vielleicht ist das als ansatz hilfreich:
      Mit \B vor einer Zeichenkette wird die Zeichenkette nur gefunden, wenn ein Wort nicht damit anfängt.
      Mit \B nach einer Zeichenkette wird die Zeichenkette nur gefunden, wenn ein Wort nicht damit endet.
    http://de.selfhtml.org/cgiperl/sprache/regexpr.htm#zeichenketten

    grüße aus Leipzig
    willie

    --
    ss:| zu:} ls:# fo:| de:] va:} ch:? sh:( n4:( rl:° br:> js:| ie:% fl:( mo:}
    http://emmanuel.dammerer.at/selfcode.html
  2. hi!

    wenn das problem tatsaechlich so einfach gestrickt ist, wie in deinem gegebenen beispiel, wuerde ich auf regexp verzichten und stattdessen eine schleife basteln, die das gewuenschte leistet. wird wahrscheinlich ohnehin schneller sein:

    ungetesteter ansatz:
    function grossesE($str){
     $result='';
     $len=strlen($str);
     $klammern=0;
     for($i=0;$i<$len;++$i){
      $lit=substr($str,$i,1);
      if($klammern==0){
       if($lit=='(') ++$klammern;
       else if($lit=='e') $lit='E';
      }else{
       if($lit==')') --$klammern;
      }
      $result.=$lit;
     }
     if($klammern!=0) echo "ERROR: string besitzt zuviele/zuwenig klammern!"
     return $result;
    }

    prost
    seth

    1. moin,
      sry... es liegt an meinem beispiel. der string davor und danach ist länger als 1 buchstabe...
      daher wird die schleife keinen erfolg haben :-(

  3. Hallo!

    gerne würde ich in einem string einen ausdruck ersetzen lassen unter der bedingung, dass er sich nicht zwischen 2 bestimmten anderen ausdrücken befindet.
    als einfaches beispiel:
    $str="abc (def) geh";
    ==[Ersetzen von "e" mit "E", wenn nicht zwischen ( und )]==>
    $neuer_string=$str="abc (def) gEh";
    und nicht so:
    $falscher_neuer_string=$str="abc (dEf) gEh";

    Ich verweise da gern immer auf ein ähnliches Problem von mir </archiv/2004/3/74622/#m430378>.

    Auf deinen Fall umgestrickt müsstest du statt nach <textarea> und </textarea> zu splitten, nach ( und ) splitten. Der "<input..."- Vergleich fällt weg!

    Hoffe damit geholfen zu haben.

    Ciao,
    Andy

  4. Hi,

    gerne würde ich in einem string einen ausdruck ersetzen lassen unter der bedingung, dass er sich nicht zwischen 2 bestimmten anderen ausdrücken befindet.

    siehe http://www.dclp-faq.de/q/q-regexp-ersetzen.html. In diesem Beispiel musst du nur die HTML-Tags (<[^>]*) durch deine Klammern austauschen (([^)]*).

    Gruß,
    Andreas.