sandra: gegenteil von / alles außer (bei regexp)

Hallo,

gibt es bei RegExp die Möglichkeit zu sagen, finde "alles außer"?

Alsomöchte per preg_replace folgendes Muster ersetzen:
|<a href="#(.*)">|iU

AUßER, wenn hinter der # "unten" steht. Also alle Anker, die nicht auf #unten verweisen.

Natürlich könnte ich eine callback benutzen, die eine Funktion zum ersetzen aufruft, aber wenn es durch ein einfaches |<a href="#(.*!="unten")">|iU gehen würde währe das natürlich performanter..

Danke
sandra

  1. Hallo, sandra!

    "beliebige Zeichen außer #" definiert man bei preg-Regexp mit [^#].

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. danke! probiere ich gleich mal aus.

    2. "beliebige Zeichen außer #" definiert man bei preg-Regexp mit [^#].

      Das war nicht gefragt und @sandra, [^#unten] führt höchstens unter sehr begrenzten und wahrscheinlich nicht vorliegenden Bedingungen zum Ziel.

      1. Das war nicht gefragt und @sandra, [^#unten] führt höchstens unter sehr begrenzten und wahrscheinlich nicht vorliegenden Bedingungen zum Ziel.

        Nach erneuter Betrachtung: eine negative lookahead assertion ist wohl schlauer :D https://forum.selfhtml.org/?t=195815&m=1311070

  2. gibt es bei RegExp die Möglichkeit zu sagen, finde "alles außer"?

    Wie wärs mit "ungleich"? - das nötige Zeichen ist das Zirkumflex (^)

    Mögliche Suchbegriffe für deine weitere Recherche sind "negate character class PCRE PHP circumflex" sowie ein Blick in die Dokumentation.

    1. bin immer dankbar für begriffe, nach denen ich suchen kann! lieben dank!

  3. Hallo!

    Natürlich könnte ich eine callback benutzen, die eine Funktion zum ersetzen aufruft, aber wenn es durch ein einfaches |<a href="#(.*!="unten")">|iU gehen würde währe das natürlich performanter..

    Ja, es gibt Lookarounds.

    Du brauchst hier einen negativen Lookahead.

    Das könnte so aussehn, wenn ich es richtig verstanden habe. Also wenn nicht die Zeichenfolge "unten" nach der Raute kommt:

      
    $pattern = '~<a href="#(?!unten)[^"]+">~i';  
    
    

    Schöne Grüße und viel Spaß,

    Jonny 5