[RegEx] Hilferuf eines RegEx-Desperados

php-kopfkratzer hat gesagt.:
Code:
   (?<=\()\s*(?!not)[\w\däöüÄÖÜ]+

Was ist mit (nott und (notttt (notttt und (nota und (nota23 und und und ?
geht nicht!

Herrgott... dann mach halt noch ein Leerzeichen hinters "not" :)

Code:
 (?<=\()\s*(?!not )[\w\däöüÄÖÜ]+
Test

.
 
ok ok, schon recht gut,
kannst du mir dann auch sagen, was passiert, wen hinter dem "(not" kein leer folgt, z.b. nach trim() oder so.dann wird laut regexcoach das (not wieder alsTreffer gewertet.
Vielleicht mit einem "oder" irgendwie?
 
Also ich arbeite mit flex, aber so groß sollten die Unterschiede ja nicht sein.
Hatte noch ein Problem in meinem RegEx.
Das [^n] beinhaltet auch Freizeichen, was den Ausdruck kaputt macht.

Da ich die !(blubb) Ausdrücke nicht mag und nicht weiß, ob der letzte gelieferte Ausdruck funktioniert, hier nochmal meine Version, die den Weg zu Fuß geht. :)

Code:
validchar       ([a-zA-Z0-9äöüÄÖÜß_])
notN            [a-mo-zA-MO-Z0-9äöüÄÖÜß]
notO            [a-np-zA-NP-Z0-9äöüÄÖÜß]
notT            [a-su-zA-SU-Z0-9äöüÄÖÜß]
whitespace      [ \t]
blubb           "("{whitespace}*(({notN})|("n"(({notO})|("o"(({notT})|("t"{validchar})))))){validchar}*
%%
{blubb}          printf("<X>%s</X>",yytext);
.                printf("%s",yytext);
\n               printf("%s",yytext);

Mit flex funktioniert es bestens.

Das hier ist die Eingabe:
Code:
( not
 ( nott
   (not
 (nott
(blah
  ( blah
(.
 (  \
Das die Ausgabe:
Code:
( not
 <X>( nott</X>
   (not
 <X>(nott</X>
<X>(blah</X>
  <X>( blah</X>
(.
 (  \
 
Super!
Bis auf den kleinen Schönheitsfehler, dass '( not' auch nicht gefunden wird, und das sollte ja prinzipiell nicht sein. Kann man da auch was machen?

greetz
php-headscratcher
 
Hm, also '( not' sollte nicht gefunden werden.
Sieht man auch in meinem Beispiel.

Wenn man in dem innersten OR angekommen ist und da noch ein 't' kommt, muss zwangsweise noch ein 'validchar' folgen. Sprich '( notx' und das soll wieder erkannt werden, richtig?
'( not' sollte so nicht herleitbar sein.


Übrigens, wenn du auch mit lex/flex arbeitest, geht das ganze einfacher.
Die Regeln...
Code:
"("" "*not
"("" "*{validchar}+
... sollten funktionieren.
In der oberen Regel macht man nichts und in der unteren sollten dann alle anderen Wörter gefunden werden.
Wenn ich's mir recht überlege, könnte man das auch in anderen Sprachen mit RegEx so lösen.
Du suchst erst nach "( not" und wenn du das nicht gefunden hast, suchst du "( xyz".
Weiß jetzt aber nicht, in welchem Kontext du den RegEx brauchst.


/edit
Mir fällt grad noch ein, dass ich bei den Ausdrück NotN/O/T auch die großen Buchstaben rausgeschmissen habe.
Entweder man packt sie wieder rein oder man sollte im eigentlichen Ausdruck das "n", "o", "t" ersetzen durch [nN], [oO], [tT].
Dann wird auch '( nOt' u.ä. rausgefiltert.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück