JavaRush /Java-Blog /Random-DE /RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdr...
Artur
Level 40
Tallinn

RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke. Teil 1

Veröffentlicht in der Gruppe Random-DE
Das Original dieses Artikels finden Sie hier . Wahrscheinlich gibt es nicht zu viel Theorie, und ich werde am Ende des Artikels mehrere Links zu detaillierterem Material zu Regex bereitstellen. Aber es schien mir, dass es viel interessanter wäre, sich mit einem Thema wie regulären Ausdrücken zu befassen, wenn es die Möglichkeit gäbe, das Wissen nicht nur zu stopfen, sondern auch sofort zu festigen, indem man nebenbei kleine Aufgaben erledigt. RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke.  Teil 1 - 1Lass uns anfangen. Typischerweise zitieren Gegner der Verwendung regulärer Ausdrücke („RegEx“ oder einfach „regex“) in der Programmierung das folgende Zitat, das Jamie Zawinski zugeschrieben wird: „Manche Leute denken, wenn sie mit einem Problem konfrontiert werden: ‚Ich weiß, ich werde reguläre Ausdrücke verwenden.‘ .'"Jetzt haben sie zwei Probleme". Tatsächlich ist die Verwendung regulärer Ausdrücke noch keine gute oder schlechte Idee. Und dies allein wird keine Probleme verursachen und keines davon lösen. Es ist nur ein Werkzeug. Und wie Sie es verwenden (richtig oder falsch), bestimmt, welche Ergebnisse Sie sehen werden. Wenn Sie beispielsweise versuchen, Regex zu verwenden, um einen HTML-Parser zu erstellen, werden Sie höchstwahrscheinlich Schmerzen haben . Wenn Sie jedoch beispielsweise nur Zeitstempel aus einigen Zeichenfolgen extrahieren möchten, ist dies wahrscheinlich kein Problem. Um Ihnen das Erlernen regulärer Ausdrücke zu erleichtern, habe ich diese Lektion zusammengestellt, die Ihnen dabei hilft, reguläre Ausdrücke in nur zwanzig kurzen Schritten von Grund auf zu erlernen. Dieses Tutorial konzentriert sich hauptsächlich auf die Grundkonzepte regulärer Ausdrücke und befasst sich nur bei Bedarf mit fortgeschritteneren Themen.

Schritt 1: Warum reguläre Ausdrücke verwenden?

RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke.  Teil 1 - 2Reguläre Ausdrücke werden verwendet, um anhand bestimmter Muster (Muster) nach Übereinstimmungen im Text zu suchen. Mithilfe von Regex können wir Wörter sowie einzelne Literal- und Metazeichen und deren Sequenzen, die bestimmte Kriterien erfüllen, einfach und unkompliziert aus Texten extrahieren. Das sagt uns Wikipedia darüber : Reguläre Ausdrücke sind eine formale Sprache zum Suchen und Bearbeiten von Teilzeichenfolgen in Texten, die auf der Verwendung von Metazeichen (Platzhalterzeichen) basiert. Für die Suche wird eine Beispielzeichenfolge (englisches Muster, im Russischen oft „Vorlage“, „Maske“ genannt) verwendet, die aus Symbolen und Metasymbolen besteht und die Suchregel definiert. Zur Textmanipulation wird zusätzlich eine Ersetzungszeichenfolge angegeben, die auch Sonderzeichen enthalten kann. Das Muster kann so einfach sein wie das Wort dogin diesem Satz:
Der schnelle Braunfuchs springt über den faulen Hund.
Dieser reguläre Ausdruck sieht folgendermaßen aus:
Hund
...Einfach genug, nicht wahr? Das Muster kann auch ein beliebiges Wort sein, das den Buchstaben enthält o. Ein regulärer Ausdruck zum Finden eines solchen Musters könnte wie folgt aussehen:
\ Wow * _
( Sie können diesen regulären Ausdruck hier ausprobieren .) Sie werden feststellen, dass mit zunehmender Komplexität der „Matching“-Anforderungen auch der reguläre Ausdruck komplexer wird. Für die Angabe von Zeichengruppen und die Zuordnung sich wiederholender Muster gibt es weitere Notationsformen, die ich im Folgenden erläutern werde. Aber was können wir damit machen, sobald wir eine Übereinstimmung mit einem Muster in einem Text finden? Mit modernen Engines für reguläre Ausdrücke können Sie Zeichen oder Zeichenfolgen (Teilzeichenfolgen) aus enthaltenem Text extrahieren, entfernen oder durch anderen Text ersetzen. Im Allgemeinen werden reguläre Ausdrücke zum Parsen und Bearbeiten von Text verwendet. Wir können beispielsweise Teilzeichenfolgen extrahieren, die wie IP-Adressen aussehen, und dann versuchen, sie zu überprüfen. Oder wir können Namen und E-Mail-Adressen extrahieren und in einer Datenbank speichern. Oder verwenden Sie reguläre Ausdrücke, um vertrauliche Informationen (z. B. Passnummern oder Telefonnummern) in E-Mails zu finden und den Benutzer darauf aufmerksam zu machen, dass er sich möglicherweise einem Risiko aussetzt. Regex ist wirklich ein vielseitiges Werkzeug, das leicht zu erlernen, aber schwer zu beherrschen ist: „So wie es einen Unterschied zwischen dem guten Spielen eines Musikstücks und dem Erstellen von Musik gibt, gibt es einen Unterschied zwischen der Kenntnis regulärer Ausdrücke und dem Verstehen.“ - Jeffrey E. F. Friedl, Mastering Regular Expressions

Schritt 2: Eckige Klammern[]

Die einfachsten regulären Ausdrücke, die leicht zu verstehen sind, sind diejenigen, die einfach nach einer zeichenweisen Übereinstimmung zwischen dem Muster des regulären Ausdrucks und der Zielzeichenfolge suchen. Versuchen wir zum Beispiel, eine Katze zu finden: RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke.  Teil 1 - 3
Muster: Katze
Schnur: Die Katze wurde zerschnitten, als sie unter das Auto fuhr.
Übereinstimmungen:      ^^^
( Wie es in der Praxis funktioniert – siehe hier ) ACHTUNG! Alle Lösungen werden hier nur als mögliche Lösungen dargestellt. In regulären Ausdrücken können Sie, wie in der Programmierung im Allgemeinen, dieselben Probleme auf unterschiedliche Weise lösen. Zusätzlich zu einem strikten zeichenweisen Vergleich können wir jedoch auch alternative Übereinstimmungen mithilfe von eckigen Klammern angeben:
Muster: ca[rt]
Schnur: Die Katze wurde zerschnitten, als sie unter das Auto fuhr.
Übereinstimmungen:      ^^^ ^^^
( Wie es funktioniert ) Das Öffnen und Schließen von eckigen Klammern teilt der Engine für reguläre Ausdrücke mit, dass sie mit jedem der angegebenen Zeichen übereinstimmen soll, jedoch nur mit einem. Der obige reguläre Ausdruck findet beispielsweise nicht das cartganze Wort, sondern nur einen Teil davon:
Muster: ca[rt]
Schnur: Die Katze wurde zerschnitten, als sie unter den Wagen lief.
Übereinstimmungen:      ^^^ ^^^
( So ​​funktioniert es ) Wenn Sie eckige Klammern verwenden, weisen Sie die Engine für reguläre Ausdrücke an, nur eines der in den Klammern enthaltenen Zeichen zu finden. Die Engine findet das Zeichen cund dann das Zeichen a. Wenn das nächste Zeichen jedoch nicht roder ist t, handelt es sich nicht um eine vollständige Übereinstimmung. Wenn es ca, und dann entweder r, oder findet t, stoppt es. Es wird nicht versucht, weitere Zeichen zu finden, da die eckigen Klammern darauf hinweisen, dass nur eines der enthaltenen Zeichen gefunden werden muss. Wenn es findet ca, findet es rdas Wort next cartund stoppt, weil es bereits eine Übereinstimmung für die Sequenz gefunden hat car.

Trainingsziele:

Schreiben Sie einen regulären Ausdruck, der allen 10 Mustern hadin Haddiesem Auszug unübersetzbarer Wortspiele im lokalen Dialekt entspricht:
Muster:
Zeichenfolge: Jim, wobei Bill had had „had“ , had had „had had“ . „Hatte gehabt“ war richtig gewesen.
Übereinstimmungen:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
( Eine mögliche Lösung finden Sie hier. ) Was ist mit allen Tiernamen im folgenden Satz?
Muster:
Zeichenfolge: Eine Fledermaus, eine Katze und eine Ratte gingen in eine Bar ...
Übereinstimmungen:    ^^^ ^^^ ^^^
( Mögliche Lösung ) Oder noch einfacher: Finden Sie die Wörter baroder bat:
Muster:
Zeichenfolge: Eine Fledermaus, eine Katze und eine Ratte gingen in eine Bar ...
Übereinstimmungen:    ^^^ ^^^
( Mögliche Lösung ) Jetzt haben wir bereits gelernt, wie man mehr oder weniger komplexe reguläre Ausdrücke schreibt, und sind erst bei Schritt 2! Lass uns weitermachen!

Schritt 3: Escape-Sequenzen

RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke.  Teil 1 - 4Im vorherigen Schritt haben wir etwas über eckige Klammern gelernt []und wie sie uns dabei helfen, mithilfe der Regex-Engine alternative Übereinstimmungen zu finden. Was aber, wenn wir Übereinstimmungen in Form von offenen und geschlossenen eckigen Klammern selbst finden möchten []? Als wir eine zeichenweise Übereinstimmung des Wortes finden wollten cat, stellten wir der Regex-Engine diese Zeichenfolge ( cat) zur Verfügung. Versuchen wir, eckige Klammern []auf die gleiche Weise zu finden:
Muster: [] 
Zeichenfolge: Sie können [] nicht mit Regex abgleichen! Das wirst du bereuen!
Streichhölzer: 
(Смотрим что получилось) Was-то не сработало, однако... Это происходит потому, что символы квадратной скобки работают Wie специальные символы движка regex, которые обычно используются для обозначения чего-то иного, и не являются буквальным шаблоном для поиска их самих. Как мы помним из шага 2, они используются для поиска альтернативных совпадений, чтобы движок regex мог найти соответствия любому из символов, содержащихся между ними. Если вы не поместите ниWieих символов между ними, это может привести к ошибке. Wasбы найти соответствия этим особым символам, мы должны экранировать их, поставив перед ними символ backslash \. Backslash (oder обратный слэш) это еще один специальный символ, который сообщает движку regex что надо искать следующий символ буквально, а не использовать его Wie метасимвол. Движок regex будет искать символы [ и ] буквально, только если им обоим будет предшествовать обратный слэш:
pattern: \[\]
string:  You can't match [] using regex! You will regret this!
matches:                 ^^ 
(Смотрим что получилось на этот раз) ОК, а если мы хотим найти сам обратный слэш? Ответ прост. Поскольку backslash \ тоже является специальным символом, то его тоже нужно экранировать. Чем? Обратным слэшем же!
pattern: \\
string:  C:\Users\Tanja\Pictures\Dogs
matches:   ^     ^     ^        ^
(Этот же пример на деле) Только специальным символам должен предшествовать backslash. Все остальные символы интерпретируются буквально по умолчанию. Например, регулярное выражение t буквально соответствует только букве t в нижнем регистре:
pattern: t
string:  t  t   t   t
matches: ^  ^   ^   ^
(Пример) Однако, такая последовательность Wie \t работает иначе. Она представляет из себя шаблон для поиска символа табуляции:
pattern: \t
string:  t  t   t   t
matches:  ^  ^   ^
(Пример) Некоторые распространенные escape-последовательности включают в себя \n (разрывы строк в стиле UNIX) и \r (используются в разрывах строк в стиле Windows, \r\n). \r является символом "возврата каретки", а \n является символом "перевода строки", оба из которых были определены вместе со Standard ASCII, когда телетайпы еще находoderсь в повсеместном использовании. Другие распространенные escape-последовательности будут рассмотрены в этом руководстве позже.

А пока закрепим материал парой несложных задачек:

Попробуйте написать регулярное выражение для поиска... регулярного выражения ;) Результат должен быть примерно таким:
pattern:
string: ...diesen regulären Ausdruck „ \[\] “ mit einem regulären Ausdruck abgleichen?
Übereinstimmungen:                       ^^^^	
( Lösung ) Haben Sie es geschafft? Gut gemacht! Versuchen Sie nun, einen regulären Ausdruck zu erstellen, um nach Escape-Sequenzen wie dieser zu suchen:
Muster:
Zeichenfolge: „ \r “, „ \t “ und „ \n “ sind allesamt Regex-Escape-Sequenzen.
Übereinstimmungen:   ^^ ^^ ^^
( Lösung )

Schritt 4: Suchen Sie mit einem Punkt nach „beliebigem“ Zeichen.

RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke.  Teil 1 - 5Beim Schreiben der Escape-Sequenz-Matching-Lösungen, die wir im vorherigen Schritt gesehen haben, haben Sie sich vielleicht gefragt: „Kann ich das Backslash-Zeichen und dann jedes andere Zeichen, das darauf folgt, zuordnen?“ ... Natürlich können Sie das! Es gibt ein weiteres Sonderzeichen, das für (fast) jedes Zeichen verwendet wird – das Punktzeichen (Punkt). Folgendes bewirkt es:
Muster: .
string: Es tut mir leid, Dave. Ich fürchte, das kann ich nicht.
Übereinstimmungen: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( Beispiel ) Wenn Sie nur Muster abgleichen möchten, die wie Escape-Sequenzen aussehen, können Sie so etwas tun:
Muster: \\. 
string: Hallo Walmart, mein Enkel dort heißt „ \n \r \t “.
Übereinstimmungen:                                              ^^ ^^ ^^	
( Beispiel ) Und wie bei allen Sonderzeichen .müssen Sie, wenn Sie ein Literal abgleichen möchten, ihm ein Zeichen voranstellen \:
Muster: \. 
Zeichenfolge: Krieg ist Frieden . Freiheit ist Sklaverei . Ignoranz ist Stärke . 
Übereinstimmungen:             ^ ^ ^
( Beispiel )

Schritt 5: Zeichenbereiche

RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke.  Teil 1 - 6Was ist, wenn Sie keine Symbole benötigen, sondern nur Buchstaben im Text finden möchten? Oder Zahlen? Oder Vokale? Durch die Suche nach Zeichenklassen und deren Bereichen können wir dies erreichen.
` \n `, ` \r ` und ` \t ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .	
Zeichen gelten als „Leerzeichen“ , wenn sie im Text keine sichtbare Markierung erzeugen. Ein Leerzeichen „ “ ist ein Leerzeichen, ein Zeilenumbruch oder ein Tabulator. Nehmen wir an, wir möchten Escape-Sequenzen finden, die nur Leerzeichen darstellen \n, \rund \tzwar in der obigen Passage, aber keine anderen Escape-Sequenzen. Wie könnten wir das machen?
Muster: \\[nrt] 
Zeichenfolge: ` \n `, ` \r ` und ` \t ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .
Übereinstimmungen:   ^^ ^^ ^^	
( Beispiel ) Das funktioniert, ist aber keine sehr elegante Lösung. Was passiert, wenn wir später die Escape-Sequenz für das „Form Feed“-Zeichen anpassen müssen \f? (Dieses Symbol wird verwendet, um Seitenumbrüche im Text anzuzeigen.)
Muster: \\[nrt] 
Zeichenfolge: ` \n `, ` \r `, ` \t ` und ` \f ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .
Übereinstimmungen:   ^^ ^^ ^^	
( Keine funktionierende Lösung ) Bei diesem Ansatz müssen wir jeden Kleinbuchstaben, den wir abgleichen möchten, separat in eckigen Klammern auflisten. Eine einfachere Möglichkeit, dies zu tun, besteht darin, Zeichenbereiche zu verwenden, die jedem Kleinbuchstaben entsprechen:
Muster: \\[az] 
Zeichenfolge: ` \n `, ` \r `, ` \t ` und ` \f ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .
Übereinstimmungen:   ^^ ^^ ^^ ^^	
( Und das funktioniert bereits ) Zeichenbereiche funktionieren wie im obigen Beispiel zu erwarten. Setzen Sie eckige Klammern um den ersten und letzten Buchstaben, den Sie abgleichen möchten, mit einem Bindestrich dazwischen. Wenn Sie beispielsweise nur „Sätze“ aus Backslash \und einem Buchstaben von abis finden möchten m, können Sie Folgendes tun:
Muster: \\[am] 
Zeichenfolge: ` \n `, ` \r `, ` \t ` und ` \f ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .
Übereinstimmungen:                         ^^	
( Beispiel ) Wenn Sie mehrere Bereiche abgleichen möchten, setzen Sie sie einfach Ende an Ende in eckige Klammern:
Muster: \\[a-gq-z] 
Zeichenfolge: ` \n `, ` \r `, ` \t ` und ` \f ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .
Übereinstimmungen:         ^^ ^^ ^^	
( Beispiel ) Andere gängige Zeichenbereiche sind: A-Zund0-9

Probieren wir sie in der Praxis aus und lösen wir ein paar Probleme:

0-9Hexadezimale Zahlen können sowohl Ziffern als auch Buchstaben enthalten A-F. Bei der Angabe von Farben können Hexadezimalcodes maximal drei Zeichen enthalten. Erstellen Sie einen regulären Ausdruck, um gültige Hexadezimalcodes in der folgenden Liste zu finden:
Muster:
Zeichenfolge: 1H8 4E2 8FF 0P1 T8B 776 42B G12
Übereinstimmungen:      ^^^ ^^^ ^^^ ^^^	
( Lösungy ) Erstellen Sie mithilfe von Zeichenbereichen einen regulären Ausdruck, der im folgenden Satz nur Konsonanten in Kleinbuchstaben (keine Vokale, einschließlich) auswählt :
Muster:string 
: Die Wände im Einkaufszentrum sind total , total hoch . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
Übereinstimmungen:   ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^	
( Lösung )

Schritt 6: „nicht“, Caret, Zirkumflex, Caret... Symbol^

RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke.  Teil 1 - 7Tatsächlich gibt es über 9000 Namen für dieses Symbol :) Aber der Einfachheit halber konzentrieren wir uns vielleicht auf „nicht“. Meine Lösung für das letzte Problem ist etwas lang. Es brauchte 17 Zeichen, um zu sagen: „Hol dir das gesamte Alphabet außer den Vokalen.“ Natürlich gibt es einen einfacheren Weg, dies zu tun. Mit dem „nicht“-Zeichen ^können wir Zeichen und Zeichenbereiche angeben, die nicht mit den im Muster angegebenen Zeichen übereinstimmen dürfen. Eine einfachere Lösung für das letzte Problem oben besteht darin, Zeichen zu finden, die keine Vokale darstellen:
Muster : [ ^ aeiou ] string 
:   Die W a nde im M a ll sind zu hoch , zu hoch . _ _ _ _ _ _ 
Übereinstimmungen: ^^ ^^ ^^^^ ^^^^ ^^ ^^^ ^ ^^ ^ ^^^^^^ ^ ^^^^^ ^^^ 	
( Beispiel ) Das „nicht“-Zeichen ^als ganz linkes Zeichen innerhalb der eckigen Klammern []weist die Engine für reguläre Ausdrücke an, ein (beliebiges) Zeichen zu finden, das nicht in den eckigen Klammern steht. Das bedeutet, dass der obige reguläre Ausdruck auch alle Leerzeichen, Punkte ., Kommas ,und Großbuchstaben Tam Satzanfang berücksichtigt. Um sie auszuschließen, können wir sie auch in eckige Klammern setzen:
Muster : [ ^ aeiou . , T ] string  
: D ie W a lle in d e m a ll sind völlig verbündet , völlig gleich . _ _ _ 
Übereinstimmungen:   ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^	
( Beispiel ) beachten Siedass wir in diesem Fall den Punkt nicht mit einem Backslash maskieren müssen, wie wir es zuvor getan haben, als wir danach gesucht haben, ohne eckige Klammern zu verwenden. Viele Sonderzeichen in eckigen Klammern werden wörtlich behandelt, einschließlich der öffnenden [, aber nicht der schließenden ]Klammer (können Sie sich vorstellen, warum?). Auch das Backslash-Zeichen \wird nicht wörtlich interpretiert. Wenn Sie einen wörtlichen Backslash mit eckigen Klammern abgleichen möchten \, müssen Sie ihn maskieren, indem Sie ihm den folgenden Backslash voranstellen \\. Dieses Verhalten wurde so konzipiert, dass Leerzeichen zum Abgleich auch in eckige Klammern gesetzt werden können:
Muster: [\t]
Zeichenfolge: tttt
Übereinstimmungen:   ^ ^ ^
( Beispiel ) Das „nicht“-Zeichen ^kann auch bei Bereichen verwendet werden. aWenn ich nur die Zeichen , b, c, xund erfassen wollte y, zkönnte ich so etwas tun:
Muster: [abcxyz] 
Zeichenfolge:   abc defghijklmnopqrstuvw xyz 
Übereinstimmungen: ^^^ ^^^
( Beispiel ) ...oder ich könnte angeben, dass ich jedes Zeichen finden möchte, das nicht zwischen dund liegt w:
Muster: [^dw] 
Zeichenfolge:   abc defghijklmnopqrstuvw xyz 
Übereinstimmungen: ^^^ ^^^
( Beispiel ) Allerdingsseid vorsichtigmit „nicht“ ^. Es ist leicht zu denken: „Nun, ich habe angegeben [^ b-f], also sollte ich einen Kleinbuchstaben aoder so etwas nachstellen f.“ Das ist nicht der Fall. Dieser reguläre Ausdruck stimmt mit allen Zeichen überein, die nicht in diesem Bereich liegen, einschließlich Buchstaben, Zahlen, Satzzeichen und Leerzeichen.
Muster: [^dw] 
Zeichenfolge:   abc defg h . i , j - klmnopqrstuvw xyz 
stimmt überein: ^^^ ^ ^ ^ ^ ^^^
( Beispiel )

Levelaufstiegsaufgaben:

Verwenden Sie das „nicht“-Zeichen ^in eckigen Klammern, um alle folgenden Wörter zuzuordnen, die nicht auf enden y:
Muster:
Zeichenfolge: Tag Hund Schwein Heu Moor Bucht Rochen Rub 
Übereinstimmungen:      ^^^ ^^^ ^^^ ^^^	
( Lösung ) Schreiben Sie einen regulären Ausdruck mit einem Bereich und einem „Nicht“-Zeichen, ^um alle Jahre zwischen 1977 und 1982 (einschließlich) zu finden:
Muster:
Zeichenfolge: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
Übereinstimmungen:            ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
( Lösung ) Schreiben Sie einen regulären Ausdruck, um alle Zeichen zu finden, die kein „Nicht“-Zeichen sind ^:
Muster:
Zeichenfolge:   abc1 ^ 23*() 
entspricht: ^^^^ ^^^^^	
( Lösung )

Schritt 7: Charakterklassen

Zeichenklassen sind noch einfacher als Zeichenbereiche. Verschiedene Engines für reguläre Ausdrücke verfügen über unterschiedliche Klassen, daher werde ich hier nur die wichtigsten behandeln. (Überprüfen Sie, welche Regex-Version Sie verwenden, da es möglicherweise mehr davon gibt – oder sie können sich von den hier gezeigten unterscheiden.) Zeichenklassen funktionieren fast wie Bereiche, aber Sie können die Werte „Start“ und „Ende“ nicht angeben:
Klasse Symbole
\d „Zahlen“[0-9]
\w „Wortsymbole“[A-Za-z0-9_]
\s „Räume“[ \t\r\n\f]
Die Zeichenklasse „Wort“ \wist besonders nützlich, da dieser Zeichensatz häufig für gültige Bezeichner (Variablennamen, Funktionsnamen usw.) in verschiedenen Programmiersprachen benötigt wird. Wir können \wden regulären Ausdruck, den wir zuvor gesehen haben, vereinfachen:
Muster: \\[az] 
Zeichenfolge: ` \n `, ` \r `, ` \t ` und ` \f ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .
Übereinstimmungen:   ^^ ^^ ^^ ^^	
Mit \wkönnen wir so schreiben:
Muster: \\\w 
Zeichenfolge: ` \n `, ` \r `, ` \t ` und ` \f ` sind Leerzeichen, ` \. `, ` \\ ` und ` \[ ` sind nicht .
Übereinstimmungen:   ^^ ^^ ^^ ^^	
( Beispiel )

2 Aufgaben zum Glück:

Wie Sie und ich wissen, kann ein Bezeichner (Name einer Variablen, Klasse, Funktion usw.) in Java nur mit dem Buchstaben a- zA- Z, einem Dollarzeichen $oder einem Unterstrich beginnen _. ( Unterstreichungen sind natürlich ein schlechter Stil, aber der Compiler überspringt sie, Anmerkung des Übersetzers .) Die restlichen Zeichen müssen „Wort“-Zeichen sein \w. Erstellen Sie mithilfe einer oder mehrerer Zeichenklassen einen regulären Ausdruck, um in den folgenden dreistelligen Sequenzen nach gültigen Java-Bezeichnern zu suchen:
Muster:
Saite:   __e $12 .x2 foo Bar 3mm
Übereinstimmungen: ^^^ ^^^ ^^^ ^^^	
( Lösung ) US-amerikanische Sozialversicherungsnummern (SSN) sind 9-stellige Zahlen im Format XXX-XX-XXXX, wobei jedes X eine beliebige Ziffer sein kann [0-9]. Schreiben Sie mithilfe einer oder mehrerer Zeichenklassen einen regulären Ausdruck, um korrekt formatierte SSNs in der folgenden Liste zu finden:
Muster:
Zeichenfolge: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
Übereinstimmungen:              ^^^^^^^^^^^
( Lösung ) RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke. Teil 2. 20 kurze Schritte zur Beherrschung regulärer Ausdrücke. Teil 3. RegEx: 20 kurze Schritte zur Beherrschung regulärer Ausdrücke. Teil 4.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION