Ściągawka z wyrażeń regularnych
| ^ |
Początek ciągu e.g. ^abc dopasuje abcd, ale nie
aabc |
| $ |
Koniec ciągu, e.g do abc$ pasuje xxxabc, ale nie
abcxx |
| [abc] |
Oznacza: a lub b lub c |
| [^] |
Wewnątrz kwantyfikatora ([]) daszek oznacza negację e.g. [^\w] oznacza
wszystkie nie-słowa, a[^qwerty] - neguje wszystkie znaki wewnątrz nawiasu kwadratowego |
| \w+ |
Dopasowuje każdą grupę znaków, które składają się na słowa |
| \W |
Znak niebędący literą ani cyfrą, odpowiednik [^a-zA-Z0-9_] |
| \S |
Znak niebędący znakiem białym, odpowiednik [^\f\n\r\t\v] |
| \s |
Znak biały (np. spacja, tab), odpowiednik [\f\n\r\t\v] |
| \D |
Znak niebędący cyfrą, odpowiednik [^0-9] |
| \d |
Dowolna cyfra, odpowiednik [0-9] |
| [a-z] |
Dowolna litera z zakresu od a do z |
| [A-Z] |
Dowolna wielka litera z zakresu od A do Z |
| x|y |
Dopasowuje x lub y, e.g. kot|s pasuje do kot i kos,
(he|gie)niek pasuje do heniek i gieniek To samo co [xy] |
| \d |
Dowolna cyfra, odpowiednik [0-9] |
| \d{5} |
Pięć cyfr (przykład), możliwe są też takie przykładowe zastosowania nawiasu:
{0,}, {1,}, {1, 6} |
| . |
Dowolny 1 znak (oprócz znaku końca linii), e.g. a.b |
| * |
Dowolna ilość znaków po jakimś znaku (także zero), odpowiednik {0,} e.g. a
(bc)* |
| + |
Jeden znak lub więcej po jakimś znaku zo+ pasuje do zo oraz
zoo, ale nie do z, odpowiednik {1,} |
| ? |
Jeden znak, ale opcjonalnie (czyli jeden lub zero), odpowiednik {0,1}, e.g.
abc? pasuje do abc lub abcd, ale nie do abccc |
| \b |
Word boundary e.g. car\b pasuje do tttcar, ale nie do
carksjlj |
| \B |
Non word boundary e.g. car\B pasuje do cardsss, ale nie do
sssscar |
| \< |
Odpowiednik \b na początku słowa (flavor specific) |
| /> |
Odpowiednik \b na końcu słowa (flavor specific) |
| \numer |
Backreference np. \1, \2, \3, ... na przykład \w\1 znajduje podwojone
słowa |
| \k<name> |
Named Backrefence |
| (?<name>pattern) |
Nazwanie wyrażenia |
Zastępowanie tekstu:
| $numer |
Zastępuje ostatni podciąg dopasowany przez wyrażenie o numerze
numer |
| ${nazwa_wyrazenia} |
Zastępuje ostatni podciąg dopasowany przez nazwane wyrażenie (<?
nazwa_wyrazenia>) |
| $$ |
Zastępuje pojedynczy znak $ |
| $& |
Zastępuje kopię dopasowanego ciągu |
| $` |
Zastępuje cały ciąg wejściowy poprzedzający dopasowanie |
| $' |
Zastępuje cały ciąg wejściowy za dopasowaniem |
| $+ |
Zastępuje ostatnią dopasowaną grupę |
| $_ |
Zastępuje cały ciąg wejściowy |
Przykłady
Wyszukanie wszystkich ciągów złożonych z litery q nie poprzedzonej literą q (czyli
dowolnym znakiem niebędącym literą u):
q[^u]
Dopasowanie dowolnego słowa w nawiasach (znaki ( oraz ) są znakami specjalnymi i
dlatego trzeba zastosować backslash):
\([a-zA-Z]+\)
Dowolna nazwa pliku z rozszerzeniem .php i dwoma parametrami przekazywanymi poprzez GET (poprzez query
string):
\w\.php?[&=\w]{2}
Godzina w formacie 12:33 am (uwaga na spację przed (am|pm)):
(1[012]|[1-9]):[0-5][0-9] (am|pm)
Adres e-mail:
^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
Tag HTML:
<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>
Adres IP:
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0
-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
Powtarzające się litery (przykład z named backreference):
(?<znak>\w)\k<znak>
Powtarzające się słowa (przykład z named backreference):
(?<słowo>\s\w+)\k<słowo> Dopasuje ba ba, ale też ba
baxxx.
Ulepszona wersja: (?<słowo>\s\w+)\k<słowo>\b dopasuje
tylko oddzielne powtarzające się słowa (e.g. do domu).
Regex w C# .NET
Programik konsolowy do testowania różnych wyrażeń regularnych. Jako parametry wywołania należy podać
ciąg znaków i wyrażenie regularne:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace RegularExpressions
{
class Program
{
[STAThread]
static void Main(string[] args)
{
if (args.Length == 2)
{
if (Regex.IsMatch(args[1], args[2]))
{
Console.WriteLine("Matches");
}
else
{
Console.WriteLine("Does not match");
}
}
}
}
}
Filtrowanie (parsowanie) tekstu:
// dumping, extracting from file
private static List<string> RegexFind(string contents)
{
List<string> result = new List<string>();
Regex r = new Regex(@"'(linkphp\.php\?[&=\w]{2,})'");
Match m;
for (m = r.Match(contents); m.Success; m = m.NextMatch())
{
result.Add(m.Groups[1].ToString());
}
return result;
}
Zastępowanie wyrażeń w tekście. Poniższy przykład zastępuje daty w formacie dd/MM/yyyy na datę w
formacie dd-MM-yyyy:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace RegexReplacingText
{
class Program
{
static void Main(string[] args)
{
string DtFrom = "12/22/2008";
Console.WriteLine(ReplaceDate(DtFrom));
}
private static string ReplaceDate(string input)
{
return Regex.Replace(input, @"\b(?<miesiac>\d{1,2})/(?<dzien>\d{1,2})/(?
<rok>\d{1,4})\b", "${dzien}-${miesiac}-${rok}");
}
}
}
Usuwanie tagów HTML z tekstu (HTML tags stripping):
public static string StripHtmlTags(string input)
{
return Regex.Replace(input, "<.*?>", string.Empty);
}
Wyrażenie tutaj jest uproszczone, ale działa w większości przypadków.