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
Dooing [ Mo, 15 Oktober 2007 12:20 ] [ ID #1845564 ]

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)
David Fuhr [ Mo, 15 Oktober 2007 12:52 ] [ ID #1845565 ]

Re: Reguläre Ausdrücke - Zeichenfolge ausschließen

Das ich nur reguläre Ausdrücke und kein PHP verwenden kann.
Dooing [ Mo, 15 Oktober 2007 13:31 ] [ ID #1845569 ]

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)
Dooing [ Mo, 15 Oktober 2007 13:37 ] [ ID #1845570 ]

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/
Harald Stowasser [ Mo, 15 Oktober 2007 13:49 ] [ ID #1845571 ]

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
Daniel Fett [ Mo, 15 Oktober 2007 13:59 ] [ ID #1845572 ]

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
Gregor Kofler [ Mo, 15 Oktober 2007 14:08 ] [ ID #1845573 ]

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]
oliver.graetz [ Di, 16 Oktober 2007 05:18 ] [ ID #1846474 ]

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
Helmut Richter [ Di, 16 Oktober 2007 09:10 ] [ ID #1846476 ]

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
Daniel Fett [ Di, 16 Oktober 2007 10:08 ] [ ID #1846477 ]

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
Ralph Stahl [ Di, 16 Oktober 2007 10:15 ] [ ID #1846478 ]

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
Ralph Stahl [ Di, 16 Oktober 2007 10:38 ] [ ID #1846479 ]

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
Daniel Fett [ Di, 16 Oktober 2007 11:09 ] [ ID #1846480 ]

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
Daniel Fett [ Di, 16 Oktober 2007 11:10 ] [ ID #1846481 ]

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
Ralph Stahl [ Di, 16 Oktober 2007 11:25 ] [ ID #1846482 ]

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
Claus Reibenstein [ Di, 16 Oktober 2007 12:40 ] [ ID #1846488 ]

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
Ralph Stahl [ Di, 16 Oktober 2007 14:02 ] [ ID #1846492 ]
PHP » de.comp.lang.php.misc » Reguläre Ausdrücke - Zeichenfolge ausschließen

Vorheriges Thema: numerische Zeichenreferenzen
Nächstes Thema: Kerberos realm/server wird ignoriert