Reguläre Ausdrücke: Unterschied zwischen den Versionen
Version vom 23. Februar 2008, 15:08 Uhr ⧼parentheses⧽ Siox⧼word-separator⧽⧼parentheses⧽ ⧼parentheses⧽ |
Version vom 29. September 2008, 09:02 Uhr ⧼parentheses⧽ OKr⧼word-separator⧽⧼parentheses⧽ K |
||
Zeile 1: | Zeile 1: | ||
=Was sind reguläre Ausdrücke= | =Was sind reguläre Ausdrücke= | ||
− | Reguläre Ausdrücke sind sehr vielseitige Wildcards. | + | Reguläre Ausdrücke sind sehr vielseitige Wildcards. Mit ".*ter\b.*" können Sie z.B. Sendungen finden, die Wörter enthalten, die auf "ter" enden. Weitere Informationen zu "regulären Ausdrücken" bekommen Sie in [[Wikipedia:Reguläre Ausdrücke|diesem Wikipedia-Artikel]]. |
Eine Erläuterung der im TV-Browser verwendeten Syntax findet man in der [http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Java-Dokumentation]. | Eine Erläuterung der im TV-Browser verwendeten Syntax findet man in der [http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Java-Dokumentation]. | ||
Zeile 8: | Zeile 8: | ||
{| border="1" cellspacing="0" cellpadding="3" | {| border="1" cellspacing="0" cellpadding="3" | ||
|Ausdruck | |Ausdruck | ||
− | | | + | |Ergebnis |
|- | |- | ||
|valign="top" align="left"|star *trek.* | |valign="top" align="left"|star *trek.* | ||
Zeile 15: | Zeile 15: | ||
|- | |- | ||
|valign="top" align="left"|.*ter\b.* | |valign="top" align="left"|.*ter\b.* | ||
− | |Beliebige Zeichen, <code>ter</code> danach ein Trennzeichen und danach wieder beliebige Zeichen. | + | |Beliebige Zeichen, <code>ter</code>, danach ein Trennzeichen und danach wieder beliebige Zeichen. |
Z.B.: <code>Heiter und Sonnig</code>, <code>Unter der Sonne</code>, <code>Winter</code> | Z.B.: <code>Heiter und Sonnig</code>, <code>Unter der Sonne</code>, <code>Winter</code> | ||
|- | |- | ||
|valign="top" align="left"|.*(James Bond|007).* | |valign="top" align="left"|.*(James Bond|007).* | ||
− | |Beliebige Zeichen gefolgt von entweder <code>James Bond</code> ODER <code>007</code> und dann wieder beliebige Zeichen. | + | |Beliebige Zeichen, gefolgt von entweder <code>James Bond</code> ODER <code>007</code> und dann wieder beliebige Zeichen. |
|- | |- | ||
|valign="top" align="left"|(.*(James *Bond|\D007).*)|007.* | |valign="top" align="left"|(.*(James *Bond|\D007).*)|007.* | ||
− | |Erste Klammer: Beliebige Zeichen gefolgt von entweder (<code>James</code> gefolgt von beliebig vielen Leerzeichen UND <code>Bond</code>) ODER kein numerisches Zeichen und <code>007</code> (damit zB. 2007 nicht gefunden wird) und dann wieder beliebige Zeichen. | + | |Erste Klammer: Beliebige Zeichen, gefolgt von entweder (<code>James</code>, gefolgt von beliebig vielen Leerzeichen UND <code>Bond</code>) ODER kein numerisches Zeichen und <code>007</code> (damit zB. 2007 nicht gefunden wird) und dann wieder beliebige Zeichen. |
− | Zweites ODER (|007.*): <code>007</code> gefolgt von beliebigen Zeichen | + | Zweites ODER (|007.*): <code>007</code>, gefolgt von beliebigen Zeichen |
|- | |- | ||
|valign="top" align="left"|(?i).*star.*trek[^:].* | |valign="top" align="left"|(?i).*star.*trek[^:].* | ||
− | |Findet alle Star Trek Filme und ignoriert die Serien. <code>(?i)</code> = ignoriere Groß- Kleinschreibung. Das Fragezeichen verhindert eine Gruppierung der Klammern. <code>.*star.*trek </code>Irgendwelche Zeichen gefolgt von <code>star</code> gefolgt von irgendwelchen Zeichen, gefolgt von <code>trek</code>. <code>[^:]</code>gefolgt von keinem Zeichen aus der Liste, wo [a-z] die Liste a,b,c,d... angibt und [^a-z] a,b,c,d ... ausschliesst | + | |Findet alle Star Trek Filme und ignoriert die Serien. <code>(?i)</code> = ignoriere Groß- Kleinschreibung. Das Fragezeichen verhindert eine Gruppierung der Klammern. <code>.*star.*trek </code>: Irgendwelche Zeichen, gefolgt von <code>star</code>, gefolgt von irgendwelchen Zeichen, gefolgt von <code>trek</code>. <code>[^:]</code>, gefolgt von keinem Zeichen aus der Liste, wo [a-z] die Liste a,b,c,d... angibt und [^a-z] a,b,c,d ... ausschliesst, gefolgt von irgendwelchen Zeichen. |
− | Findet "Star Trek IV" aber nicht "Star Trek: irgendetwas" | + | Findet "Star Trek IV", aber nicht "Star Trek: irgendetwas" |
|- | |- | ||
|valign="top" align="left"|(?i).*star.*trek[:].* | |valign="top" align="left"|(?i).*star.*trek[:].* | ||
Zeile 35: | Zeile 35: | ||
= Generelles = | = Generelles = | ||
− | Reguläre Ausdrücke (auch regular expressions, kurz Regex) bieten die Möglichkeit Texte durch Muster zu beschreiben. Am besten versteht man es in etwa so | + | Reguläre Ausdrücke (auch regular expressions, kurz Regex) bieten die Möglichkeit, Texte durch Muster zu beschreiben. Am besten versteht man es in etwa so: Du hast einen Text, den du finden möchtest. Mit regulären Ausdrücken kannst du die Schablone dafür erzeugen, die beim Auflegen auf den Text das Ergebnis zeigt. |
− | Reguläre Ausdrücke werden vielfälltig verwendet. Man kann mit ihnen | + | Reguläre Ausdrücke werden vielfälltig verwendet. Man kann mit ihnen URLs wie "http://www.example.com", Emails etc. überprüfen. Aber genauso kann man sie verwenden, um Filme, Serien etc ausfindig zu machen. So könnte man sich zum Beispiel anzeigen lassen, welche Sendung eine URL als Info anzeigt. |
<code>\b((https?|telnet|gopher|file|wais|ftp):[\w/\#~:.?+=&%@!-]+?)(?=[.:?\-]*(?:[^\w/\#~:.?+=%@!-]|$))</code> | <code>\b((https?|telnet|gopher|file|wais|ftp):[\w/\#~:.?+=&%@!-]+?)(?=[.:?\-]*(?:[^\w/\#~:.?+=%@!-]|$))</code> | ||
Zeile 45: | Zeile 45: | ||
{| border="1" cellspacing="0" cellpadding="3" | {| border="1" cellspacing="0" cellpadding="3" | ||
| '''Ausdruck''' | | '''Ausdruck''' | ||
− | | ''' | + | | '''Ergebnis''' |
|- | |- | ||
| valign="top" align="left"|<code>\b</code> | | valign="top" align="left"|<code>\b</code> | ||
Zeile 51: | Zeile 51: | ||
|- | |- | ||
| valign="top" align="left"|<code>(https?|telnet|gopher|file|wais|ftp)</code> | | valign="top" align="left"|<code>(https?|telnet|gopher|file|wais|ftp)</code> | ||
− | | Diese müssen enthalten sein | + | | Diese müssen enthalten sein, wobei <code>https?</code> bedeutet: http ist Pflicht, aber das "s" muss <code>einmal oder keinmal</code> vorhanden sein. (Durch ein ? am "s") |
|- | |- | ||
| valign="top" align="left"|<code>:</code> | | valign="top" align="left"|<code>:</code> | ||
Zeile 57: | Zeile 57: | ||
|- | |- | ||
| valign="top" align="left"|<code>[\w/\#~:.?+=&%@!-]+?</code> | | valign="top" align="left"|<code>[\w/\#~:.?+=&%@!-]+?</code> | ||
− | | | + | | Ein oder mehrere gültige Zeichen aus der Liste. In [] eckigen Klammern markiert dies als Liste. <code>+?</code> sagt aber: so wenige wie möglich. |
|- | |- | ||
| valign="top" align="left"|<code>?=[.:?\-]*</code> | | valign="top" align="left"|<code>?=[.:?\-]*</code> |
Version vom 29. September 2008, 09:02 Uhr
Was sind reguläre Ausdrücke
Reguläre Ausdrücke sind sehr vielseitige Wildcards. Mit ".*ter\b.*" können Sie z.B. Sendungen finden, die Wörter enthalten, die auf "ter" enden. Weitere Informationen zu "regulären Ausdrücken" bekommen Sie in diesem Wikipedia-Artikel.
Eine Erläuterung der im TV-Browser verwendeten Syntax findet man in der Java-Dokumentation.
Beispiele
Ausdruck | Ergebnis |
star *trek.* | Findet alles mit star am Anfang, gefolgt von beliebig vielen Leerzeichen, danach ein trek und dann beliebige Zeichen.
Z.B.: |
.*ter\b.* | Beliebige Zeichen, ter , danach ein Trennzeichen und danach wieder beliebige Zeichen.
Z.B.: |
.*(James Bond|007).* | Beliebige Zeichen, gefolgt von entweder James Bond ODER 007 und dann wieder beliebige Zeichen.
|
(.*(James *Bond|\D007).*)|007.* | Erste Klammer: Beliebige Zeichen, gefolgt von entweder (James , gefolgt von beliebig vielen Leerzeichen UND Bond ) ODER kein numerisches Zeichen und 007 (damit zB. 2007 nicht gefunden wird) und dann wieder beliebige Zeichen.
Zweites ODER (|007.*): |
(?i).*star.*trek[^:].* | Findet alle Star Trek Filme und ignoriert die Serien. (?i) = ignoriere Groß- Kleinschreibung. Das Fragezeichen verhindert eine Gruppierung der Klammern. .*star.*trek : Irgendwelche Zeichen, gefolgt von star , gefolgt von irgendwelchen Zeichen, gefolgt von trek . [^:] , gefolgt von keinem Zeichen aus der Liste, wo [a-z] die Liste a,b,c,d... angibt und [^a-z] a,b,c,d ... ausschliesst, gefolgt von irgendwelchen Zeichen.
Findet "Star Trek IV", aber nicht "Star Trek: irgendetwas" |
(?i).*star.*trek[:].* | Findet alle Star Trek Titel, die Star Trek: enthalten
|
Generelles
Reguläre Ausdrücke (auch regular expressions, kurz Regex) bieten die Möglichkeit, Texte durch Muster zu beschreiben. Am besten versteht man es in etwa so: Du hast einen Text, den du finden möchtest. Mit regulären Ausdrücken kannst du die Schablone dafür erzeugen, die beim Auflegen auf den Text das Ergebnis zeigt.
Reguläre Ausdrücke werden vielfälltig verwendet. Man kann mit ihnen URLs wie "http://www.example.com", Emails etc. überprüfen. Aber genauso kann man sie verwenden, um Filme, Serien etc ausfindig zu machen. So könnte man sich zum Beispiel anzeigen lassen, welche Sendung eine URL als Info anzeigt.
\b((https?|telnet|gopher|file|wais|ftp):[\w/\#~:.?+=&%@!-]+?)(?=[.:?\-]*(?:[^\w/\#~:.?+=%@!-]|$))
So sagt
Ausdruck | Ergebnis |
\b
|
Beginne an der Wortgrenze |
(https?|telnet|gopher|file|wais|ftp)
|
Diese müssen enthalten sein, wobei https? bedeutet: http ist Pflicht, aber das "s" muss einmal oder keinmal vorhanden sein. (Durch ein ? am "s")
|
:
|
Der Doppelpunkt muss danach vorhanden sein. |
[\w/\#~:.?+=&%@!-]+?
|
Ein oder mehrere gültige Zeichen aus der Liste. In [] eckigen Klammern markiert dies als Liste. +? sagt aber: so wenige wie möglich.
|
?=[.:?\-]*
|
Ausschau halten nach möglichen Interpunktionszeichen |
(?:
|
aber nicht gruppieren (Keine Treffer festhalten), |
[^\w/\#~:.?+=%@!-]|$
|
möglichen ungültigen Zeichen oder Stringende (Wortende). |