AnsichtenInhaltsverzeichnis Reguläre Ausdrücke BeispieleRegular-Expression enthält den Syntax.
Bei der Konstruktion von komplizierteren Reguläre Ausdrücke baut man diese am besten wie mathematische Formeln Segment für Segment zusammen.
Je nach Software kann die Verfügbarkeit und der Syntax variieren. Je nach Software müssen Stringbegrenzer "" '' angepaßt oder mit \" \' Escape geschützt werden. Je nach Software kann es zu Problemen mit speziellen Zeichen oder Escape kommen, zB "\<" "\\<". Um sicherzustellen das die Mustersuche wie erwartet funktioniert, ist es sinnvoll diese sorgfältig zu testen, und einen Test-String zusammenzustellen um viele Varianten und Ausnahmesituationen zu prüfen. Grundsätzlich muß man bei RegEx beachten, daß wenn die Suche in Text mit Strings "" oder Kommentaren durchgeführt wird, es zu Fehler kommen kann wenn Suchmuster innerhalb von ungewollten Textbereichen gefunden werden. Die Absicherung gegen solche Fehler benötigt dann meistens komplizierte Suchmuster. Auch können einige komplizierte Lexer- und Syntax-Suchmuster und Datenprüfungen nur sinnvoll mit zusätzlichem Code ermöglicht werden, RegEx kann viel aber nicht alles. Farben(Die Einfärbung kann fehlerhaft sein.) [ - ] ~~ Zeichenklassen und Wortklassen . \d \D \w \W \s \S ( | ) ~~ Varianten (?: (?<= (?<! ~~ Look-around (?= (?! (?(?= ~~ Bedingungen { } ~~ Wiederholungen * + ? ^ $ ~~ Zeichenort und Begrenzer \b \B \A \z \Z \G \< \> \\ \t \n \r \v \f \a \e ~~ Escape Zeichen \x12 \u1234 ~~ Zeichencode \1 \2 \3 \4 \5 \6 \7 \8 \9 ~~ Rückwärtsreferenzen Namen~~ Name der mit einem Buchstaben beginnen muß, und Danach auch beliebige "_"-Unterstrich und Zahlen erlaubt. (zB Bezeichner¦Variabelnamen) Name = "^([a-zA-Z][a-zA-Z0-9_]*)$" ~~ Ein Namen der ein Bindestrich erlaubt, Text-Segmente müssen mindestens 2 Zeichen lang sein und nur der erste Buchstabe darf groß geschrieben werden. Name = "^([a-zA-Z][a-z]+)$" ~~ Zusätzlich mit mehreren Bindestrinchen Name = "^([a-zA-Z][a-z]+)(([ -][a-zA-Z][a-z])+)$" Worte~~ Wort in deutsch Wort = "\b([a-zA-Z0-9ÄÖÜäöüß]+)\b" ~~ Satz in deutsch Satz = "^([a-zA-Z0-9äöüÄÖÜß\+\-\*/_ ]*?[\.\?:!])$" ZahlenFür Zahlen kann \b nicht als Wortgrenze eingesetzt werden, da -+ als Wortgrenze betrachtet werden. Die Wortgrenze wird mit Look-around Bedingungen festgelegt (?<![\w\-\+\.])WORT(?![\w\-\+\.]) ~~ Positive Ganzzahl, 1 bis 999999999 Zahl = "(?<![\w\-\+\.])([1-9][0-9]{0,8})(?![\w\-\+\.])" ~~ Ganzzahl, 0 oder 1 bis 999999999 mit Vorzeichen Zahl = "(?<![\w\-\+\.])(0|[\-\+]?[1-9][0-9]{0,8})(?![\w\-\+\.])" ~~ Bruchzahl -0.123 Zahl = "(?<![\w\-\+\.])(([\+\-]?[0-9]+)(\.[0-9]+)?)(?![\w\-\+\.])" ~~ Float -0.123E+10 ~~ Findet: "0", "+10", "+10.00", "+10.00E+10" ~~ Findet nicht: "+0", "01", "10.", "10.E+10", "10E+1.0" Zahl = "(?<![\w\-\+\.])((0|[\-\+]?([0-9]|[1-9][0-9]*)?\.[0-9]+|[\-\+]?[1-9][0-9]*)([eEdD][\-\+]?[0-9]+)?)(?![\w\-\+\.])" Zeit~~ Stunden, (00 bis 23) Stunden = "\b([01][0-9]|2[0-3])\b" ~~ Minuten Sekunden, (00 bis 59) MinutenSekunden = "\b([05][0-9])\b" ~~ Stunden:Minuten:Sekunden, (hh:mm:ss 00:00:00 Bis 23:59:59) Minute = "^" & Stunden & ":" & MinutenSekunden & ":" & MinutenSekunden & "$" DatumFür eine exakte Erkennung der Wochentage im Monat (28 30 31) ist ein Code Notwendig. ~~ Jahr, 1900 bis 2019 Jahr = "\b(19[0-9][0-9]|20[01][0-9])\b" ~~ Monat, 1 oder 01 bis 12 Monat = "\b(0?[1-9]|1[0-2])\b" ~~ Tag, 1 oder 01 bis 31 Tag = "\b(0?[1-9]|[12][0-9]|3[01])\b" ~~ Jahr-Monat-Tag (1900-01-01 bis 2019-12-31) Datum = "^" & Jahr & "[\-\./\\]" & Monat & "[\-\./\\]" & Tag & "$" Datei~~ Dateiname, Alls Zeichen erlaubt außer "\x00-\x19 "*./:<>?\|" (" " und "." ist nur erlaubt wenn ein weiteres Zeichen folgt.) ~~ Findet: "Datei1", "Datei2.ext", "Datei1.Datei2.ext", " D atei1 D atei2 .ext" ~~ Findet nicht: "Datei1/Datei2", " ", " ." Dateiname = "^(([ \.]*([^\x00-\x19 \.\"\*:<>\?\|/\\])+[ \.]*)*)$" ~~ Dateiname und Typen Dateiname = "^(([ \.]*([^\x00-\x19 \.\"\*:<>\?\|/\\])+[ \.]*)*)\.(exe|dll|ocx)$" ~~ Pfad, mit Laufwerksbuchstaben und / am Ende ~~ Findet: "C:\Pfad1\Pfad2\", "C:/Pfad1/Pfad2/", "C:/ P fad1 / P fad2 /" ~~ Findet nicht: "C:\Pfad1\\Pfad2\", "C:\Pfad1\Pfad2" Pfad = "^([a-zA-Z]:[/\\](([ \.]*(([^\x00-\x19 \.\"\*:<>\?\|/\\])+[ \.]*)*[/\\])*))$" IPIP-Adressen bestehen aus vier Zahlen, ~~ Zahl 1 bis 255 IP14 = "\b(0?0?[1-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b" ~~ Zahl 0 bis 255 IP23 = "\b(0?0?[0-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b" ~~ IP (1.0.0.1 bis 255.255.255.255) IP = "^" & IP14 & "\." & IP23 & "\." & IP23 & "\." & IP14 & "$" Oder auch alle Zahlen von 0 - 255 oder 000 - 255, wenn alle IPs eingeschlossen werden sollen. ~~ Zahl 0 bis 255 IP1234 = "\b(0?0?[0-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b" ~~ IP (0.0.0.0 bis 255.255.255.255 oder 000.000.000.000 bis 255.255.255.255) IP = "^" & IP1234 & "\." & IP1234 & "\." & IP1234 & "\." & IP1234 & "$" URL~~ http:// und https://, wenn vorhanden http = "\b((?:https?|ftp)://)?" ~~ www., wenn vorhanden www = "\b(www\.)?" ~~ Domain, Name mit Buchstaben Beginnend und danach mit einem "." oder "-" unterbrochenen Buchstaben Domain = "\b([a-zA-Z](?:[\.\-]?[a-zA-Z0-9])*)" ~~ TLD Top-Level-Domain, ein Buchstabentext 2 bis 8 Zeichen lang (ohne TopLevelDomain Prüfung) TLD = "\b(\.(?:af|ax|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|au|at|az|bs|bh|bd|bb|by|be|bz|bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|kh|cm|ca|cv|ky|cf|td|cl|cn|cx|cc|co|km|cg|cd|ck|cr|ci|hr|cu|cy|cz|dk|dj|dm|do|ec|eg|sv|gq|er|ee|et|fk|fo|fj|fi|fr|gf|pf|tf|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|gt|gg|gn|gw|gy|ht|hm|va|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jp|je|jo|kz|ke|ki|kp|kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|mx|fm|md|mc|mn|ms|ma|mz|mm|na|nr|np|nl|an|nc|nz|ni|ne|ng|nu|nf|mp|no|om|pk|pw|ps|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|sh|kn|lc|pm|vc|ws|sm|st|sa|sn|cs|sc|sl|sg|sk|si|sb|so|za|gs|es|lk|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|tl|tg|tk|to|tt|tn|tr|tm|tc|tv|ug|ua|ae|gb|us|um|uy|uz|vu|ve|vn|vg|vi|wf|eh|ye|zm|zw|com|edu|gov|int|mil|net|org|biz|info|name|pro|aero|coop|museum|arpa))" ~~ Verzeichnis Pfad = "\b(/(?:[\w\-\+\.]+/)*)" ~~ Datei Datei = "\b((?:[\w\-\+\.\?&=%]+)*)" ~~ Parameter Parameter = "\b(\?(?:[\w\-\+\.&=%]+)*)" ~~ URL, Dies ist keine Syntaxprüfung für ein URL, sondern nur ein Parser für die Informationsfragmente ~~ https://www.domain1.domain2.ch/pfad1/pfad2/datei.html?par1=test&par2=test%202 ~~ \1 = "https://" ~~ \2 = "www." ~~ \3 = "domain1.domain2" ~~ \4 = ".ch" ~~ \5 = "/pfad1/pfad2/" ~~ \6 = "datei.html" ~~ \7 = "?par1=test&par2=test%202" URL = "^" & http & www & Domain & TLD & Pfad & Datei & Parameter & "$" ~~ EMail-Adresse (ohne TopLevelDomain Prüfung) EMail = "^([a-zA-Z][\w\.\-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.\-]*[a-zA-Z0-9]\.[a-zA-Z]{2,8})$" ~~ EMail-Adresse (mit TopLevelDomain Prüfung) EMail = "^([a-zA-Z][\w\.\-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.\-]*[a-zA-Z0-9]\.(af|ax|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|au|at|az|bs|bh|bd|bb|by|be|bz|bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|kh|cm|ca|cv|ky|cf|td|cl|cn|cx|cc|co|km|cg|cd|ck|cr|ci|hr|cu|cy|cz|dk|dj|dm|do|ec|eg|sv|gq|er|ee|et|fk|fo|fj|fi|fr|gf|pf|tf|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|gt|gg|gn|gw|gy|ht|hm|va|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jp|je|jo|kz|ke|ki|kp|kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|mx|fm|md|mc|mn|ms|ma|mz|mm|na|nr|np|nl|an|nc|nz|ni|ne|ng|nu|nf|mp|no|om|pk|pw|ps|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|sh|kn|lc|pm|vc|ws|sm|st|sa|sn|cs|sc|sl|sg|sk|si|sb|so|za|gs|es|lk|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|tl|tg|tk|to|tt|tn|tr|tm|tc|tv|ug|ua|ae|gb|us|um|uy|uz|vu|ve|vn|vg|vi|wf|eh|ye|zm|zw|com|edu|gov|int|mil|net|org|biz|info|name|pro|aero|coop|museum|arpa))$" HTML-Tag~~ Tag, mit beliebigem Inhalt HtmlTag = "<.+?>" HtmlTag = "<[^>]+?>" ~~ Tag, nur mit Buchstaben HtmlTag = "<[a-zA-Z][a-zA-Z0-9]*?>" ~~ Tag, mit Start- und End-Tag und der Möglichkeit den Inhalt dazwischen weiterzuverwenden HtmlTag = "<([a-zA-Z]\w*)\b[^>]*>(.*?)</\1>" ~~ Tag, mit Start- und End-Tag und der Möglichkeit den Inhalt dazwischen weiterzuverwenden, und Schutz gegen Verschachtelung HtmlTag = "<([a-zA-Z]\w*)\b[^>]*>((?:(?!</?\1[^>]*>).)*)</\1>" ~~ Alle HTML-Tag HtmlTag = "<(a|abbr|acronym|address|applet|area|b|base|basefont|bdo|big|blockquote|body|br|button|caption|center|cite|code|col|colgroup|dd|del|dfn|dir|div|dl|dt|em|fieldset|font|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|hr|html|i|iframe|img|input|ins|isindex|kbd|label|legend|li|link|map|menu|meta|noframes|noscript|object|ol|optgroup|option|p|param|pre|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|ul|var)(\b|[ \t]+[^>]*)>" ~~ Sichere Variante mit '" Schutz für <tag par1=">" par2='>'> HtmlTag = "<[a-zA-Z][a-zA-Z0-9]*(?:\b|[ \t]+(?:[^'"\n\r>]+(?:'[^'\n\r]*'|"[^"\n\r]*")*[^'"\n\r>]*)*)>" ~~ Sichere Variante mit '" Schutz für <tag par1=">" par2='>'>Text<tag> und Inhalt ~~ (In einem VB-Code müssen im String die " zu "" korrigiert werden, oder in PHP " zu \" ) ~~ (Falls (?: in der verwendeten Software nicht unterstützt wird, muß (?: zu ( geändert werden, und die Nummerierung ändert sich dadurch) ~~ "<tag par1=">" par2='>'>Text<tag>" ~~ \1 = "<" ~~ \2 = "tag" ~~ \3 = " par1=">" par2='>'" ~~ \4 = ">" ~~ \5 = "Text" ~~ \6 = "</tag>" HtmlTag = "(<)([a-zA-Z][a-zA-Z0-9]*)(\b|[ \t]+(?:[^'"\n\r>]+(?:'[^'\n\r]*'|"[^"\n\r]*")*[^'"\n\r>]*)*)(>)(.*?)(</\2>)" ~~ HTML-Kommentar Kommentar = "(<!--[ \t]*)(.*?)([ \t]*-->)" Kommentar = "(<!--\s*)(.*?)(\s*-->)" ~~ HTML-Zeichencode ZeichenCode = "(&\#([0-9]{1,5}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{1,4});)" ZeichenCode = "(&(nbsp|quot|lt|gt|amp);)" ZeichenCode = "(&(iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml);)" |