14
bonn-to-code.net bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail: [email protected]

Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:[email protected]@web.de

Embed Size (px)

Citation preview

Page 1: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

bonn-to-code.netbonn-to-code.net

Keine Angst vor Regulären Ausdrücken

21.09.2010Martin Winkler

EMail: [email protected]

Page 2: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Was ist ein Regulärer Ausdruck?•Eine „Schablone“

Schablone (RegEx)... ...passt auf

a* a, aa, aaa, ...

(aa)* aa, aaaa, ...

(a|b) a, b

Page 3: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Character ClassesAusdruck Bedeutung

. Beliebiger Character

[abcd] oder [a-zA-Z] Einer aus der Menge

[^abcd] Keiner aus der Menge

Page 4: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Character Classes (cont'd)Ausdruck Bedeutung

\s Whitespace Character

\S Kein Whitespace

\d Ziffer (0,…,9)

\D Keine Ziffer

\w Word-Character

\W Kein Word-Character

Page 5: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Group( )

(?<theAbcGroup>abc)

Named Group

(aa)*

(a|b)

(?<name> )

Page 6: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

QuantifierAusdruck Bedeutung

* 0 oder mehr

+ 1 oder mehr

? 0 oder 1

Page 7: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

AnchorAusdruck Bedeutung

\A Muss am String-Anfang matchen

\z ( kleines z ) Muss am String-Ende matchen

Bar\z findet einen Treffer bei „FooBar“

\ABar findet keinen Treffer bei „FooBar“

Page 8: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Alternative|

ab|cd ab oder cd

Page 9: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Was kann ich damit anfangen?

•Prüfen:Erfüllt ein string ein Muster?

•Extrahieren:Substrings rausgreifen und weiterverwenden

•Ersetzen:Ersatz verwendet das Ersetzte

• ...

Page 10: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Fallstricke #1A|AB vs AB|A

Pattern A|AB

Eingabe A Matched A

AB Matched A

Pattern AB|A

Eingabe A Matched A

AB Matched AB

Page 11: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Fallstricke #2Zeilenumbrüche und . (Wildcard)

Wildcard . matched per Default-Verhalten keine Zeilenumbrüche.

Sollen Zeilenumbrüche ebenfalls matchen, Singleline-Modus aktivieren:

Regex.Match( input, pattern, RegexOptions.Singleline );

Page 12: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Fallstricke #3B(?<A>A)?B ist nicht B(?<A>A?)B

In beiden Fällen ist A in BAB optional

Aber:

(...)?

Eingabe BB Group[„A“].Count ist 0

(...?)

Eingabe BB Group[„A“].Count ist 1

Page 13: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Fallstricke #4\(* \)* stellt nicht sicher: gleiche Anzahl von ( und )

\(* \)* matched sowohl

( ),(( ))

Als auch

()) oder ))) usw.

Page 14: Bonn-to-code.net Keine Angst vor Regulären Ausdrücken 21.09.2010 Martin Winkler EMail:martinwinkler82@web.demartinwinkler82@web.de

Wo schlage ich nach?Liste aller Sprachelementehttp://msdn.microsoft.com/en-us/library/az24scfc.aspx

Umfassende Erklärung von RegEx(auch lookahead/lookbehind assertions und back references)http://www.vsj.co.uk/articles/display.asp?id=789

RegEx Optionen http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions%28v=VS.100%29.aspxWas ist denn nun in \w enthalten?http://msdn.microsoft.com/en-us/library/20bw873z.aspx#WordCharacterund http://stackoverflow.com/questions/2998519/net-regex-what-is-the-word-character-wdazu: Unicode Character Database http://www.unicode.org/ucd/dazu: Liste der 'Punctuation, Connector' Categoryhttp://www.fileformat.info/info/unicode/category/Pc/list.htm