RegExp - match $ aber nicht \$



  • Shade: Einfach sowas vielleicht? (Achtung, ungetestet!)

    \$.*[^\]\$
    

    edit: Hm, ich weiß ja nicht wie genau Dein Format aussieht, aber bei näherer Betrachtung könnte es sein dass mein Ausdruck zu gierig ist... 🙄


  • Mod

    @nman:
    thx. das hat geholfen.

    Lösung ist:
    preg_match('/[^\\]\(.+?[^\\\\\\])\\/ms', 'hallotest\\yes$nix', $matches);
    echo $matches[1];



  • Uff, das sieht ja übel aus. 😃

    Ich meine ich verwende preg_match() ja nicht, aber warum eigentlich ".+?"? 😕
    Normalerweise hieße das doch "höchstens einmal(mindestens einmal(irgendein zeichen))", und wäre nichtmal gültig, oder? *garnichtauskenn*

    Sehen Deine Strings eigentlich immer so aus dass Du nur einen Start- und einen End-Delimiter hast?
    Dann könntest Du nämlich einfach /\.*\\/ matchen, das .* frisst alles bis zum letzten Vorkommen von $...


  • Mod

    nman schrieb:

    Uff, das sieht ja übel aus. 😃

    stimmt, leider...

    aber warum eigentlich ".+?"? 😕

    + heisst AFAIK 1 bis n matches, während * 0 bis n matches bedeutet...
    Dies ist nur n Beispiel und das + hat keine Bedeutung... könnte genauso * sein

    Sehen Deine Strings eigentlich immer so aus dass Du nur einen Start- und einen End-Delimiter hast?

    Natürlich nicht.

    Wenn dus wissen willst:
    '/[\\]\$(.*?)(=|<>|<|>|<=|>=?)(.*?[^\\])\$(.*?[\\])\(.*?[^\\\\\\])\\/ms'
    das ist die entgültige RegExp

    Sinn:
    conditionconditionaction1action2action2
    ein simples if
    wenn condition true, print action1, andernfalls action2



  • Ich verstehe es trotzdem nicht.

    + heißt 1..n, könnte man also als {1,} notieren
    * heißt 0..n, könnte man also als {0,} notieren
    ? heißt 0..1, könnte man also als {0,1} notieren

    was soll ".?" jetzt heißen? kein oder einmal kein bis unendlich viele Zeichen? Das ist für micht das selbe, wie ".". Wo leigt mein Fehler?


  • Mod

    Helium schrieb:

    Wo leigt mein Fehler?

    Vielleicht bei mir?
    Ich muss gestehen mich nie dafür interessiert zu haben. Ich habe 'gelernt', sprich abgeschaut aus dem Code in der Arbeit, dass man es so 'macht'.

    dh also, dass das ? unnötig ist?
    OK, danke. Wieder was gelernt.



  • Shade Of Mine schrieb:

    dh also, dass das ? unnötig ist?

    Eigentlich nicht nur unnötig sondern IMO sogar ungültig.

    Der finale Ausdruck sieht ja wirklich monströs aus, wenn ich wieder ein bisschen Zeit habe muss ich mir mal anschaun ob das nicht einfacher gehen könnte. :rolleyes_


  • Mod

    nman schrieb:

    Der finale Ausdruck sieht ja wirklich monströs aus, wenn ich wieder ein bisschen Zeit habe muss ich mir mal anschaun ob das nicht einfacher gehen könnte. :rolleyes_

    ungültig ist es nicht - nur sinnlos.

    wie Helium schon erklärt hat (thx btw)
    ? bedeutet 0 oder 1 mal matchen, bei .* bedeutet 0 bis n mal irgendein buchstabe und das ? bedeutet zusätzlich dass das ganze 0 oder 1 mal matchen soll. was redundant ist.

    ich hab das ? jetzt entfernt - und läuft wie zu erwarten war super.

    wenn du ihn vereinfachen willst - nur her damit.



  • Shade Of Mine schrieb:

    wenn du ihn vereinfachen willst - nur her damit.

    Ich hab die nächste Zeit jetzt massig Arbeit, ich hab noch 2 neue Aufträge bekommen! 🙂

    Aber wenn ich mal einen Tag frei habe dann schau ichs mir nochmal an, sowas reizt mich doch eher...


  • Mod

    nman schrieb:

    ich hab noch 2 neue Aufträge bekommen! 🙂

    👍
    gratuliere


Anmelden zum Antworten