Reguläre Ausdrücke - Zeichenfolge ausschließen
Hallo, brauche einen regulären Ausdruck - er soll:
Alle Strings "erlauben", die nicht mit "auto_" beginnen.
Also ok wäre:
auto
autobahn
1
a
1234
abcdefgh
a1b2
nicht ok wäre:
auto_
auto_1
auto_a
auto_1234
auto_abcdefgh
auto_a1b2
Habe zu regulären Ausdrücken ein ziemlich cooles Tutorial gefunden:
http://www.danielfett.de/df_artikel_regex.html
Dort steht unter anderem:
..*(?<!Müll)eimer
Auf Basis dessen habe ich mir dann gebaut:
(?<!auto_)[0-9A-Za-z_+\-]+
Was aber leider nicht funktioniert - ich vermute, weil der
Nachfolgestring, definiert durch "0-9A-Za-z_+\-"
eben theoretisch auch "auto_" sein könnte! D.h. die Regel sagt so
gesehen beginne nicht mit auto_ aber dann kannst du "auto_schreiben!!!
Irgendeine Ahnung, wie man das hinkriegen kann?
Danke,
Martin
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Martin Mücke schrieb:
> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
Was spricht gegen !preg_match('/^auto_/', $string)
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Das ich nur reguläre Ausdrücke und kein PHP verwenden kann.
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Das ich nur reguläre Ausdrücke und kein PHP verwenden kann (Wird
verwendet für Tool ähnlich mod rewrite)
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Martin Mücke schrieb:
> Hallo, brauche einen regulären Ausdruck - er soll:
> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
Du möchtest also
"auto_[0-9A-Za-z_+\-]*"
finden?
Gutes Tool für regex: http://weitz.de/regex-coach/
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Martin Mücke schrieb:
> Hallo, brauche einen regulären Ausdruck - er soll:
>
> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
>
....
> Habe zu regulären Ausdrücken ein ziemlich cooles Tutorial gefunden:
> http://www.danielfett.de/df_artikel_regex.html
Vielen Dank für die Blumen ;-)
>
> Dort steht unter anderem:
> .*(?<!Müll)eimer
>
> Auf Basis dessen habe ich mir dann gebaut:
> (?<!auto_)[0-9A-Za-z_+\-]+
^(?!auto_) sollte es tun. Also ein negative lookahead.
Daniel
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Martin Mücke meinte:
> Das ich nur reguläre Ausdrücke und kein PHP verwenden kann (Wird
> verwendet für Tool ähnlich mod rewrite)
Hä?
preg_* arbeitet mit regulären Ausdrücken. Also das zwischen '/ und /'
ist ein regulärer Ausdruck.
Und wenn dich PHP nicht interessiert - warum fragst du in einer PHP-Gruppe?
Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Martin Mücke schrieb:
> Das ich nur reguläre Ausdrücke und kein PHP verwenden kann.
Dann ist das hier OT. *g*
OK, versuch's mal mit [^a][^u] usw., ich glaube besser geht Negieren
hierbei leider nicht, da trauere ich ja immer noch der guten alten
Amiga-Shell nach...
OLLi
--
"Well, lady I must say-- (admiring smile) You're my kinda stupid."
[Mal, firefly 113]
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
On Tue, 16 Oct 2007, Oliver Grätz wrote:
> OK, versuch's mal mit [^a][^u] usw., ich glaube besser geht Negieren
> hierbei leider nicht, da trauere ich ja immer noch der guten alten
> Amiga-Shell nach...
siehe auch:
http://www.lrz.de/services/schulung/unterlagen/regul/regul-1 4.html#publish4.3.4.0.0.0
--
Helmut Richter
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Oliver Grätz schrieb:
> Martin Mücke schrieb:
>> Das ich nur reguläre Ausdrücke und kein PHP verwenden kann.
>
> Dann ist das hier OT. *g*
>
> OK, versuch's mal mit [^a][^u] usw., ich glaube besser geht Negieren
> hierbei leider nicht, da trauere ich ja immer noch der guten alten
> Amiga-Shell nach...
Du meinst
^[^a][^u][^t][^o][^_] ?
Das ist Quark, weil das auch z.b. motorrad rausfiltern (also verbieten)
würde. Eine Lösung habe ich nebenan schon genannt.
Daniel
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Daniel Fett schrieb:
> Martin Mücke schrieb:
>> Hallo, brauche einen regulären Ausdruck - er soll:
>>
>> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
>>
> ...
>> Habe zu regulären Ausdrücken ein ziemlich cooles Tutorial gefunden:
>> http://www.danielfett.de/df_artikel_regex.html
>
> Vielen Dank für die Blumen ;-)
>
>> Dort steht unter anderem:
>> .*(?<!Müll)eimer
>>
>> Auf Basis dessen habe ich mir dann gebaut:
>> (?<!auto_)[0-9A-Za-z_+\-]+
>
> ^(?!auto_) sollte es tun. Also ein negative lookahead.
>
> Daniel
Guckstu:
http://www.regular-expressions.info/lookaround.html
Ralph
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Daniel Fett schrieb:
> Martin Mücke schrieb:
>> Hallo, brauche einen regulären Ausdruck - er soll:
>>
>> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
>>
> ...
>> Habe zu regulären Ausdrücken ein ziemlich cooles Tutorial gefunden:
>> http://www.danielfett.de/df_artikel_regex.html
>
> Vielen Dank für die Blumen ;-)
>
>> Dort steht unter anderem:
>> .*(?<!Müll)eimer
>>
>> Auf Basis dessen habe ich mir dann gebaut:
>> (?<!auto_)[0-9A-Za-z_+\-]+
>
> ^(?!auto_) sollte es tun. Also ein negative lookahead.
>
> Daniel
richtiger: ^(?<=auto_)[\d\w]+ , denn es geht ja um "nicht auto_". Tip:
mit http://weitz.de/regex-coach/ kann man das schön ausprobieren.
Ralph
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Ralph Stahl schrieb:
> Daniel Fett schrieb:
>> Martin Mücke schrieb:
>>> Hallo, brauche einen regulären Ausdruck - er soll:
>>>
>>> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
>>>
>> ...
>>> Habe zu regulären Ausdrücken ein ziemlich cooles Tutorial gefunden:
>>> http://www.danielfett.de/df_artikel_regex.html
>>
>> Vielen Dank für die Blumen ;-)
>>
>>> Dort steht unter anderem:
>>> .*(?<!Müll)eimer
>>>
>>> Auf Basis dessen habe ich mir dann gebaut:
>>> (?<!auto_)[0-9A-Za-z_+\-]+
>>
>> ^(?!auto_) sollte es tun. Also ein negative lookahead.
>>
>> Daniel
>
> richtiger: ^(?<=auto_)[\d\w]+ , denn es geht ja um "nicht auto_". Tip:
> mit http://weitz.de/regex-coach/ kann man das schön ausprobieren.
Wen willst du hier verbessern? Dein Vorschlag ist Unsinn und erfüllt
nicht die im OP genannten Anforderungen.
<?php
$regexes = array('~^(?!auto_)~', '~^(?<=auto_)[\d\w]+~');
$tests = array ('auto_matik', 'automreaktor', 'boot', 'motorrad',
'blub', '', '1', 'auto_12dw');
foreach ($regexes as $regex)
{
echo "<hr>REGEX $regex<br>";
foreach ($tests as $test)
{
echo "auf '$test' trifft der regex ";
if (! preg_match($regex, $test))
{
echo 'nicht';
}
echo "<br>";
}
}
?>
Ausgabe:
REGEX ~^(?!auto_)~
auf 'auto_matik' trifft der regex nicht
auf 'automreaktor' trifft der regex
auf 'boot' trifft der regex
auf 'motorrad' trifft der regex
auf 'blub' trifft der regex
auf '' trifft der regex
auf '1' trifft der regex
auf 'auto_12dw' trifft der regex nicht
REGEX ~^(?<=auto_)[\d\w]+~
auf 'auto_matik' trifft der regex nicht
auf 'automreaktor' trifft der regex nicht
auf 'boot' trifft der regex nicht
auf 'motorrad' trifft der regex nicht
auf 'blub' trifft der regex nicht
auf '' trifft der regex nicht
auf '1' trifft der regex nicht
auf 'auto_12dw' trifft der regex nicht
Daniel
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Ralph Stahl schrieb:
> Daniel Fett schrieb:
>> Martin Mücke schrieb:
>>> Hallo, brauche einen regulären Ausdruck - er soll:
>>>
>>> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
>>>
>> ...
>>> Habe zu regulären Ausdrücken ein ziemlich cooles Tutorial gefunden:
>>> http://www.danielfett.de/df_artikel_regex.html
>>
>> Vielen Dank für die Blumen ;-)
>>
>>> Dort steht unter anderem:
>>> .*(?<!Müll)eimer
>>>
>>> Auf Basis dessen habe ich mir dann gebaut:
>>> (?<!auto_)[0-9A-Za-z_+\-]+
>>
>> ^(?!auto_) sollte es tun. Also ein negative lookahead.
>>
>> Daniel
>
> Guckstu:
> http://www.regular-expressions.info/lookaround.html
Wieso teilst du mir das mit?
Daniel
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Daniel Fett schrieb:
> Ralph Stahl schrieb:
>> Daniel Fett schrieb:
>>> Martin Mücke schrieb:
>>>> Hallo, brauche einen regulären Ausdruck - er soll:
>>>>
>>>> Alle Strings "erlauben", die nicht mit "auto_" beginnen.
>>>>
>>> ...
>>>> Habe zu regulären Ausdrücken ein ziemlich cooles Tutorial gefunden:
>>>> http://www.danielfett.de/df_artikel_regex.html
>>> Vielen Dank für die Blumen ;-)
>>>
>>>> Dort steht unter anderem:
>>>> .*(?<!Müll)eimer
>>>>
>>>> Auf Basis dessen habe ich mir dann gebaut:
>>>> (?<!auto_)[0-9A-Za-z_+\-]+
>>> ^(?!auto_) sollte es tun. Also ein negative lookahead.
>>>
>>> Daniel
>> richtiger: ^(?<=auto_)[\d\w]+ , denn es geht ja um "nicht auto_". Tip:
>> mit http://weitz.de/regex-coach/ kann man das schön ausprobieren.
>
> Wen willst du hier verbessern? Dein Vorschlag ist Unsinn und erfüllt
> nicht die im OP genannten Anforderungen.
Ich hab die Anforderung nicht richtig gelesen, sorry.
Ralph
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Daniel Fett schrieb (Fullquote gekürzt):
> Ralph Stahl schrieb:
>
>> Daniel Fett schrieb:
>>
>>> ^(?!auto_) sollte es tun. Also ein negative lookahead.
>>
>> Guckstu:
>> http://www.regular-expressions.info/lookaround.html
>
> Wieso teilst du mir das mit?
Weil das hier eine PHP- und keine Perl-Gruppe ist. Oder kennt PHP dieses
Konstrukt ebenfalls?
Gruß. Claus
Re: Reguläre Ausdrücke - Zeichenfolge ausschließen
Claus Reibenstein schrieb:
> Daniel Fett schrieb (Fullquote gekürzt):
>
>> Ralph Stahl schrieb:
>>
>>> Daniel Fett schrieb:
>>>
>>>> ^(?!auto_) sollte es tun. Also ein negative lookahead.
>>> Guckstu:
>>> http://www.regular-expressions.info/lookaround.html
>> Wieso teilst du mir das mit?
>
> Weil das hier eine PHP- und keine Perl-Gruppe ist. Oder kennt PHP dieses
> Konstrukt ebenfalls?
>
> Gruß. Claus
Ja, auch wenn da "Perl 5" drübersteht. Zumindest bei 5.2 benutze ich es.
Der Link war auch eher für Martin als für Daniel gedacht.
Ralph