Regular Expressions Syntax
Förord
Regular Expressions har ni säkert alla hört talas om i något sammanhang, i denna artikel tänker jag snabbt gå igenom vad det är och hur dess syntax ser ut. Att notera är att jag kommer endast kommer att behandla PCRE, Perl Compatible Regular Expressions.
Vad är Regular Expressions?
Du har säkert använt *.html eller liknande när du har sökt efter HTML filer, *.html är en mycket enkel Regular Expression (eller Reguljärt Uttryck) även kallat RegEx eller RegExp. RegExp är mycket mer avancerat än föregående exempel, t.ex. skulle du kunna skriva en RegExp för att validera en epost-adress, en url eller kanske kolla så att formatet på ett datum.
Varför heter det Regular Expressions?
Regular Expressions spåras tillbaka till arbetet av en amerikansk matematiker vid namnet Stephen Kleene (en av de mest inflytelserika personen i utvecklingen av teoretisk datavetenskap) som utvecklade regular expressions som en notation för att beskiva vad han kallade "the algebra of regular sets." Hans arbete användes i tidiga försök av sökalgoritmer, och från detta till de tidigare text-manipulation verktygen under Unix t.ex. ed och grep (grep står för Global Regular Expression Print). I sammanhanget av datorsökningar kallas "*" för "Kleene star."
Regular Expressions Syntax
Att läsa en något sånär avancerad RegExp är inte alltid det lättaste, ta t.ex. en titt på denna
([\w-]+\.)*[\w-]+\@([\w-]+\.)+[a-zA-Z]{2,}
Denna RegExp skulle kunna användas för att validera en epostadress.. Så, nu går vi vidare till vad alla de olika tecknen och symbolerna egentligen betyder.
» Characters
» Character Classes
» Predefined Classes
» Boundary Matchers
» Greedy Closures
» Reluctant Closures
» Logical Operators
» Backreferences
Characters | |
unicodeChar | Matches any identical unicode character |
\ | Used to quote a meta-character (like '*') |
\\ | Matches a single '\' character |
\0nnn | Matches a given octal character |
\xhh | Matches a given 8-bit hexadecimal character |
\\uhhhh | Matches a given 16-bit hexadecimal character |
\t | Matches an ASCII tab character |
\n | Matches an ASCII newline character |
\r | Matches an ASCII return character |
\f | Matches an ASCII form feed character |
Character Classes | |
[abc] | Simple character class |
[a-zA-Z] | Character class with ranges |
[^abc] | Negated character class |
Predefined Classes | |
. | Matches any character other than newline |
\w | Matches a "word" character (alphanumeric plus "_") |
\W | Matches a non-word character |
\s | Matches a whitespace character |
\S | Matches a non-whitespace character |
\d | Matches a digit character |
\D | Matches a non-digit character |
Boundary Matches | |
^ | Matches only at the beginning of a line |
$ | Matches only at the end of a line |
\b | Matches only at a word boundary |
\B | Matches only at a non-word boundary |
Greedy Closures | |
A* | Matches A 0 or more times (greedy) |
A+ | Matches A 1 or more times (greedy) |
A? | Matches A 1 or 0 times (greedy) |
A{n} | Matches A exactly n times (greedy) |
A{n,} | Matches A at least n times (greedy) |
A{n,m} | Matches A at least n but not more than m times (greedy) |
Reluctant Closures | |
A*? | Matches A 0 or more times (reluctant) |
A+? | Matches A 1 or more times (reluctant) |
A?? | Matches A 0 or 1 times (reluctant) |
Logical Operators | |
AB | Matches A followed by B |
A|B | Matches either A or B |
(A) | Used for subexpression grouping |
Backreferences | |
\n | Backreference to nnd parenthesized subexpression |
Pelle Johansson
Som läsare kan det vara trevligt om man kunde se hur man instansierar regexp från såväl asp, vb, c# samt vb.net för att underlätta för användaren när testarna startas. Samtidigt föreslås länkning till just regexpsidan som du skapat på pellesoft.
Pelle Johansson
Det vore även bra om du kunde finna relaterade dokument som tidigare finns på pellesoft och sätta upp dessa som "relaterat till". Det underlättar för läsaren som vill läsa mer infomation.
Johan Normén
Hej. Din artikel verkar bara sluta mitt i? Skall det vara så? "Denna RegExp skulle kunna användas för att validera en epostadress.. Så, nu går vi vidare till vad alla de olika tecknen och symbolerna egentligen betyder." <-- Inget mera... Mvh Johan
Johan Segolsson
Det skulle vara trevligt om du hade en del enklare exempel, samt hur man använder regexp precis som pelle skrev...
Sven Åke Persson
Mycket intressant,nu förstår jag lite mer av detta komplicerade ämne
Pelle Johansson
Du nämner att du postade artikeln för tidigt, hade varit intressant att få läsa mer. Många elever kliar sig i huvudet för regexp och hade varit perfekt att referera till.
Ola Lindfeldt
Ett trevligt program som underlättar när man ska ta fram ett RegEx: http://www.regexbuddy.com/
Nyligen
Sidor
Statistik
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
27 926
260 264
374 722
0
Kontakta oss
Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se