RegExp - match $ aber nicht \$
-
flenders schrieb:
geht das nicht einfach mit \\$
Das Problem ist nicht wie ich die Sequenz \$ angebe - das geht in der Tat mit \\$ - aber wie sage ich ihm, dass er $ nicht matchen soll, wenn davor ein \ steht?
preg_match("/\(.*?)\\/",..)
so sieht es momentan aus - aber mein beispiel
blablablathis\_should\_be\_allowed\\but_is_notblablabla matcht mir this\_should\_be_allowed\ anstatt this\_should\_be\_allowed\\but_is_notweil er ja nicht weiss, dass ich \$ erlaube und nur $ (ohne \ davor) der delimiter.
$ ist vielleicht doof gewählt. $ kann jede x-beliebige Zeichenfolge sein, bei mir ist es halt $, das geht mit %, | oder foo genauso - mit dem selben Problem.
-
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...
-
@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 $...
-
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 * seinSehen 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 RegExpSinn:
action1
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} notierenwas soll ".?" jetzt heißen? kein oder einmal kein bis unendlich viele Zeichen? Das ist für micht das selbe, wie ".". Wo leigt mein Fehler?
-
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_
-
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...
-
nman schrieb:
ich hab noch 2 neue Aufträge bekommen!
gratuliere