Reguläre Ausdrücke (mit Beispielen) - 1

„Und jetzt erzähle ich Ihnen von regulären Ausdrücken. Dieses Thema ist gleichzeitig komplex und einfach. Um reguläre Ausdrücke gründlich zu verstehen, müssen Sie möglicherweise zwei oder drei umfangreiche Bücher lesen, aber ich kann Ihnen beibringen, wie man sie verwendet im Augenblick."

„Wie erfahrene Programmierer gerne scherzen: Wenn man ein Problem hat und glaubt, es mit regulären Ausdrücken lösen zu können, hat man jetzt zwei Probleme.“

"Hmm."

„Ich hoffe, ich habe dich nicht zu sehr erschreckt, mein Freund. Nein?“

„Okay, gut. Unser neues Thema sind also reguläre Ausdrücke.“

„Wenn wir sie zu stark vereinfachen, sind reguläre Ausdrücke Muster für Zeichenfolgen.“

„Sie können überprüfen, ob eine Zeichenfolge mit einem bestimmten Muster übereinstimmt. Sie können eine Zeichenfolge auch mithilfe eines Trennzeichens oder eines Musters in Teile aufteilen.“

„Aber fangen wir mit etwas Einfachem an: Was ist ein Muster?

„In SQL (aber nicht in Java) können Sie überprüfen, ob eine Zeichenfolge mit einem bestimmten Muster übereinstimmt. So sieht es aus:“

name like 'Alex%'

Hier ist der Name eine Variable, wie ein Befehl zum Überprüfen eines Musters, und „Alex%“ ist das Muster.

In diesem Fall bedeutet % eine beliebige Zeichenfolge oder Teilzeichenfolge.

Muster Zum Muster passende Saiten
'Alex%' Alex
Alex andr
Alex ander
Alex andra
….
'%X%' Ma x
Ma x im
Ale x andr
'%A' Olg a
Helen a
Ir a

„Wenn Sie in SQL angeben müssen, dass nur ein weiteres Zeichen vorhanden sein soll, verwenden Sie den Unterstrich: „_“.“

Muster Zum Muster passende Saiten
'Alex%_' Alex
Alex andr
Alex ander
Alex andra
….
'_X' Axt
Bx
Cx
'___' Aaa
Aab
Bbb

"Das macht Sinn."

„Okay, dann lass uns zu regulären Ausdrücken übergehen.“

„Reguläre Ausdrücke enthalten in der Regel nicht nur Beschränkungen hinsichtlich der Anzahl der Zeichen, sondern auch hinsichtlich ihres ‚Inhalts‘.“ Jede Maske besteht normalerweise aus zwei (manchmal mehr) Teilen: Der erste beschreibt die „Zeichenpräferenzen“ und der zweite die Anzahl der Zeichen ."

„Hier sind einige Inhaltsbeispiele :“

Muster Beschreibung Beispiele
. Irgendein Charakter 1
\D Beliebige Ziffer 7
\D Alle nicht-stelligen Zahlen C
\S Ein Leerzeichen, ein Zeilenumbruch oder ein Tabulatorzeichen ' '
\S Alles außer Leerzeichen, Tabulatoren und Zeilenumbrüchen F
[az] Jeder Buchstabe von a bis z z
[0-9] Jede Ziffer von 0 bis 9. 8
\w Beliebiges Wortzeichen C
\W Jedes Zeichen, das kein Wort ist _

„Ich werde mich nicht sofort daran erinnern, aber es sieht nicht allzu schwer aus.“

„Ausgezeichnet, hier sind Beispiele für die Anzahl der Zeichen in einer Maske:

Muster Beschreibung Beispiele
A? Das Zeichen „A“ kommt einmal oder gar nicht vor A
B+ Das Zeichen „B“ kommt einmal oder mehrmals vor BBBB
C* Das Zeichen „C“ kommt null oder mehrmals vor CCC
D{n} Das Zeichen „D“ kommt n-mal vor Das Muster D{4} entspricht DDDD
E{n,} Das Zeichen „E“ kommt n-mal oder öfter vor Das Muster E{2,} entspricht EEEEEEE
F{n,m} Das Zeichen „F“ kommt n- bis m-mal vor Das Muster E{2,4} entspricht EEEE

„Das scheint alles ziemlich einfach zu sein.“

„Du begreifst alles so schnell. Jetzt wollen wir sehen, wie alles zusammen aussieht:“

Muster Beschreibung Beispiele
[Anzeige]? Ein Zeichen zwischen „a“ und „d“ kommt einmal oder gar nicht vor A B C D
[bd,z]+ Die Zeichen „b“, „c“, „d“ oder „z“ kommen einmal oder mehrmals vor b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[1,7-9]* Die Ziffern 1, 7, 8 oder 9 kommen null oder mehrmals vor 1, 7, 9, 9777, 111199
1{5} Die Ziffer 1 kommt 5 Mal vor 11111
[1,2,a,b]{2} Die Symbole 1, 2, „a“ oder „b“ kommen zweimal vor 11, 12, 1a, ab, 2b, bb, 22
[a,0]{2,3} Die Symbole „a“ oder 0 kommen zwei- oder dreimal vor aa, a0,00,0a, aaa,000, a00,0a0, a0a

„Immer noch alles klar.“

„Wirklich? Hmm. Entweder habe ich alles wirklich gut erklärt, oder du begreifst es zu schnell. Nun ja, so oder so ist das gut für uns.“

„Hier ein paar neue Erkenntnisse für Sie.“

„Da reguläre Ausdrücke oft verwendet werden, um Teilzeichenfolgen zu finden, können wir unseren Mustern zwei weitere Zeichen (^ und $) hinzufügen.“

„^ bedeutet, dass die Teilzeichenfolge den Anfang der Zeichenfolge enthalten muss.“

„$ bedeutet, dass die Teilzeichenfolge das Ende der Zeichenfolge enthalten muss.“

"Hier sind einige Beispiele:"

Muster Zeichenfolge und Teilzeichenfolgen, die dem Muster entsprechen
ein{3} aaa  a  aaa  a  aaa
a{3}$ aaa a aaa a  aaa
^a{3} aaa  a aaa a aaa
^a{3}$ aaa a aaa a aaa

„Und noch ein wichtiger Punkt.“

„In regulären Ausdrücken haben die folgenden Zeichen eine besondere Bedeutung: [ ] \ / ^ $ . | ? * + ( ) { }. Sie werden Steuerzeichen genannt. Sie können sie also nicht einfach in Zeichenfolgen verwenden.“

„Wie im Java-Code müssen sie mit Escapezeichen versehen werden. „Und auch hier wird wie im Java-Code das Zeichen ‚\‘ dafür verwendet.“

„Wenn wir eine Zeichenfolge beschreiben wollen, die aus drei ‚?‘ besteht. Zeichen können wir nicht „?{3}“ schreiben, weil „?“ ist ein Steuerzeichen. Wir müssen es so machen: \?{3}. Wenn wir ein „\“-Zeichen verwenden möchten, müssen wir „\\“ schreiben.“

"OK habe es."

„Und hier noch ein interessanter Leckerbissen: In Dateien mit Java-Code muss das ‚\‘-Zeichen auch in Strings maskiert werden, da es ein Steuerzeichen ist.“

"Natürlich."

„Wenn Sie also versuchen, einen regulären Java-Ausdruck in einer Zeichenfolge zu definieren, müssen Sie das Zeichen „\“ zweimal maskieren.“

„Hier ist ein Beispiel:“

Ich möchte eine Maske, die mit „c:\anything“ übereinstimmt.
Theoretisch sollte der reguläre Ausdruck so aussehen:
ein „c“-Zeichen,
Doppelpunkt,
Backslash,
Punkt und Sternchen (zur Bezeichnung einer beliebigen Anzahl von Zeichen). Ich habe Leerzeichen hinzugefügt, um die Lesbarkeit zu verbessern:
c : \ .*
Aber die Zeichen '\' und '.' müssen maskiert werden, sodass der reguläre Ausdruck wie folgt aussieht:
c :   \\ \. *
Oder ohne Leerzeichen
c: \\ \. *
„Wir sollten drei Backslashes in unserem regulären Ausdruck haben.
Das bedeutet, dass der reguläre Ausdruck in einer Java-Datei so aussehen wird:“
String regexp = „c: \\\\ \\. *“;

„Wow! Whoa. Jetzt weiß ich es.“

„Und wenn Sie sich dazu entschließen, sich eingehender damit zu befassen, finden Sie hier ein paar gute Links:“

Lektion auf Wikipedia