Regular Expressions 101

Save & Share

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression

/
/
g

Test String

Code Generator

Generated Code

# coding=utf8 # the above tag defines encoding for this document and is for Python 2.x compatibility import re regex = r" <name>([^<]+).*\n(?:.*\n){0,8}.*\n.*\n\s+<coordinates>(\d+\.\d+),(\d+\.\d+)" test_str = ("<?xml version='1.0' encoding='UTF-8'?>\n" "<kml xmlns='http://earth.google.com/kml/2.0'>\n" "<Folder>\n" " <Style id='icon243'>\n" " <IconStyle>\n" " <Icon>\n" " <href>https://poi.gpsforalle.dk/img_icon_show.php?cid=243</href>\n" " </Icon>\n" " </IconStyle>\n" " </Style>\n" " <Style id='icon_ok'>\n" " <IconStyle>\n" " <Icon>\n" " <href>http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png</href>\n" " </Icon>\n" " </IconStyle>\n" " </Style>\n" " <Style id='icon_bad'>\n" " <IconStyle>\n" " <Icon>\n" " <href>http://maps.google.com/mapfiles/kml/pushpin/red-pushpin.png</href>\n" " </Icon>\n" " </IconStyle>\n" " </Style>\n" " <Folder>\n" " <name>Attraktioner</name>\n" " <Folder>\n" " <name>Forlystelser</name>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Baboon City Herning</name>\n" " <address>Åkirkebyvej 10\n" "7400 Herning</address>\n" " <phoneNumber>+45 97 22 13 14</phoneNumber>\n" " <Point>\n" " <coordinates>8.97809,56.15279,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Bakken Klampenborg</name>\n" " <address>Dyrehavevej 62\n" "2930 Klampenborg</address>\n" " <phoneNumber>+45 39 63 35 44</phoneNumber>\n" " <Point>\n" " <coordinates>12.57905,55.77484,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Beach Bowl A/S Ringkøbing</name>\n" " <address>Lodbergsvej 36\n" "6950 Ringkøbing</address>\n" " <phoneNumber>+45 97 33 89 00</phoneNumber>\n" " <Point>\n" " <coordinates>8.11473,56.12247,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Bonbon-Land Holmegaard</name>\n" " <address>Gartnervej 2\n" "4684 Holmegaard</address>\n" " <phoneNumber>+45 55 53 07 00</phoneNumber>\n" " <Point>\n" " <coordinates>11.86094,55.26057,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Bornholms Middelaldercenter Gudhjem</name>\n" " <address>Stangevej 1\n" "3760 Gudhjem</address>\n" " <phoneNumber>+45 56 49 83 19</phoneNumber>\n" " <Point>\n" " <coordinates>14.95664,55.17535,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Brændesgårdshaven Svaneke</name>\n" " <address>Højevejen 4\n" "3740 Svaneke</address>\n" " <phoneNumber>+45 56 49 60 76</phoneNumber>\n" " <Point>\n" " <coordinates>15.10366,55.12917,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Børnenes Eventyrfabrik Kokkedal</name>\n" " <address>Industripark 11\n" "2980 Kokkedal</address>\n" " <phoneNumber>+45 48 14 00 06</phoneNumber>\n" " <Point>\n" " <coordinates>12.48366,55.90240,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Cecilie's Herlev</name>\n" " <address>Hørkær 1-3\n" "2730 Herlev</address>\n" " <phoneNumber>+45 55 55 50 50</phoneNumber>\n" " <Point>\n" " <coordinates>12.43004,55.72063,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Christiansminde Minigolf Svendborg</name>\n" " <address>Christiansmindevej 20\n" "5700 Svendborg</address>\n" " <phoneNumber>+45 53 13 00 09</phoneNumber>\n" " <Point>\n" " <coordinates>10.63836,55.05997,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Danfoss Universe Nordborg</name>\n" " <address>Mads Patent Vej 1\n" "6430 Nordborg</address>\n" " <phoneNumber>+45 74 88 95 00</phoneNumber>\n" " <Point>\n" " <coordinates>9.80957,55.04147,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Dinos Legeland Ishøj</name>\n" " <address>Industribuen 7C\n" "2635 Ishøj</address>\n" " <phoneNumber>+45 70 20 70 76</phoneNumber>\n" " <Point>\n" " <coordinates>12.33468,55.61783,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Dinos Legeland København S</name>\n" " <address>Asger Jorns Allé 4\n" "2300 København S</address>\n" " <phoneNumber>+45 70 20 70 76</phoneNumber>\n" " <Point>\n" " <coordinates>12.57445,55.61966,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Dinos Legeland Fredericia</name>\n" " <address>Nørrebrogade 121\n" "7000 Fredericia</address>\n" " <phoneNumber>+45 75 92 20 10</phoneNumber>\n" " <Point>\n" " <coordinates>9.74471,55.57831,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Djurs Sommerland Nimtofte</name>\n" " <address>Randersvej 17\n" "8581 Nimtofte</address>\n" " <phoneNumber>+45 86 39 84 00</phoneNumber>\n" " <Point>\n" " <coordinates>10.55086,56.42646,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Eventyrs fabrikken Mega Center Ballerup Ballerup</name>\n" " <address>Telegrafvej 2\n" "2750 Ballerup</address>\n" " <phoneNumber>+45 44 68 22 96</phoneNumber>\n" " <Point>\n" " <coordinates>12.34713,55.73278,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Experimentarium Hellerup Hellerup</name>\n" " <address>Tuborg Havnevej 7\n" "2900 Hellerup</address>\n" " <phoneNumber>+45 39 27 33 33</phoneNumber>\n" " <Point>\n" " <coordinates>12.57962,55.72661,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Fiske og Familiepark West Ringkøbing</name>\n" " <address>Hovervej 56-58\n" "6950 Ringkøbing</address>\n" " <phoneNumber>+45 97 33 54 11</phoneNumber>\n" " <Point>\n" " <coordinates>8.29847,56.14273,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Fårup Sommerland Saltum</name>\n" " <address>Pirupvejen 147\n" "9492 Saltum</address>\n" " <phoneNumber>+45 98 88 16 00</phoneNumber>\n" " <Point>\n" " <coordinates>9.64932,57.27051,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Gerlev Legepark Slagelse</name>\n" " <address>Skælskør Landevej 28\n" "4200 Slagelse</address>\n" " <phoneNumber>+45 58 58 40 65</phoneNumber>\n" " <Point>\n" " <coordinates>11.32872,55.35485,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Hasle Camping Minigolf Hasle</name>\n" " <address>Fælledvej 30\n" "3790 Hasle</address>\n" " <phoneNumber>+45 56 94 53 00</phoneNumber>\n" " <Point>\n" " <coordinates>14.70721,55.17903,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Jesperhus Nykøbing M</name>\n" " <address>Legindvej 30\n" "7900 Nykøbing M</address>\n" " <phoneNumber>+45 96 70 14 00</phoneNumber>\n" " <Point>\n" " <coordinates>8.81502,56.76437,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Labyrinthia Them</name>\n" " <address>Gl. Ryvej 2\n" "8653 Them</address>\n" " <phoneNumber>+45 86 84 99 44</phoneNumber>\n" " <Point>\n" " <coordinates>9.57570,56.10658,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>LegeJunglen Slangerup</name>\n" " <address>Københavnsvej 19\n" "3550 Slangerup</address>\n" " <phoneNumber>+45 70 22 24 68</phoneNumber>\n" " <Point>\n" " <coordinates>12.18030,55.84386,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Legeparken Kolding</name>\n" " <address>Grønningen 2\n" "6000 Kolding</address>\n" " <phoneNumber>+45 23 72 67 36</phoneNumber>\n" " <Point>\n" " <coordinates>9.48116,55.49495,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Legoland Billund</name>\n" " <address>Nordmarksvej\n" "7190 Billund</address>\n" " <phoneNumber>+45 75 33 13 33</phoneNumber>\n" " <Point>\n" " <coordinates>9.13085,55.73514,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Leos Legeland Herlev Herlev</name>\n" " <address>Herlev Hovedgade 31\n" "2730 Herlev</address>\n" " <phoneNumber>+45 44 65 00 60</phoneNumber>\n" " <Point>\n" " <coordinates>12.44959,55.71780,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Leos Legeland Ishøj Ishøj</name>\n" " <address>Industribuen 5\n" "2635 Ishøj</address>\n" " <phoneNumber>+45 38 42 27 00</phoneNumber>\n" " <Point>\n" " <coordinates>12.33460,55.61883,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Leos Legeland Odense Odense C</name>\n" " <address>Petersmindevej 1E\n" "5000 Odense C</address>\n" " <phoneNumber>+45 97 12 12 94</phoneNumber>\n" " <Point>\n" " <coordinates>10.42132,55.40389,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Leos Legeland Aalborg Aalborg</name>\n" " <address>Poul Larsens Vej 12\n" "9000 Aalborg</address>\n" " <phoneNumber>+45 98 12 12 94</phoneNumber>\n" " <Point>\n" " <coordinates>9.93355,57.03388,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Leos Legeland Aarhus Aarhus N</name>\n" " <address>Grahambells vej 12\n" "8200 Aarhus N</address>\n" " <phoneNumber>+45 86 21 00 20</phoneNumber>\n" " <Point>\n" " <coordinates>10.18486,56.20308,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Madsby Legepark Fredericia</name>\n" " <address>Lumbyesvej 45\n" "7000 Fredericia</address>\n" " <phoneNumber>+45 72 10 68 62</phoneNumber>\n" " <Point>\n" " <coordinates>9.73711,55.57021,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Minigolfbanen Saxild Odder</name>\n" " <address>Skovduevej 188\n" "8300 Odder</address>\n" " <phoneNumber>+45 86 55 85 79</phoneNumber>\n" " <Point>\n" " <coordinates>10.24980,55.97460,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>NaturBornholm Aaekirkeby</name>\n" " <address>Grønningen 30\n" "3720 Aaekirkeby</address>\n" " <phoneNumber>+45 56 94 04 00</phoneNumber>\n" " <Point>\n" " <coordinates>14.91738,55.06420,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Nicolai for børn Kolding</name>\n" " <address>Skolegade 2 C\n" "6000 Kolding</address>\n" " <phoneNumber>+45 79 79 75 75</phoneNumber>\n" " <Point>\n" " <coordinates>9.47069,55.49103,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Power Racing Gokart Akademi Herlev</name>\n" " <address>Lyskær 7\n" "2730 Herlev</address>\n" " <phoneNumber>+45 20 33 77 22</phoneNumber>\n" " <Point>\n" " <coordinates>12.43445,55.71431,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Rømø Familie- og Hesteland Rømø</name>\n" " <address>Havnebyvej 201\n" "6792 Rømø</address>\n" " <phoneNumber>+45 74 75 51 22</phoneNumber>\n" " <Point>\n" " <coordinates>8.54310,55.09942,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Samsø Labyrinten Samsø</name>\n" " <address>Issehoved 1\n" "8305 Samsø</address>\n" " <phoneNumber>+45 24 27 37 17</phoneNumber>\n" " <Point>\n" " <coordinates>10.55426,55.97243,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Sommerland Sjælland Nørre Asmindrup</name>\n" " <address>Gl. Nykøbingvej 169\n" "4572 Nørre Asmindrup</address>\n" " <phoneNumber>+45 59 31 21 00</phoneNumber>\n" " <Point>\n" " <coordinates>11.61068,55.89626,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Stevns Camping Minigolf Strøby</name>\n" " <address>Strandvejen 29\n" "4671 Strøby</address>\n" " <phoneNumber>+45 60 14 41 54</phoneNumber>\n" " <Point>\n" " <coordinates>12.29022,55.39788,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Strandskovens Minigolf Ballen</name>\n" " <address>Strandskoven 7\n" "8305 Ballen</address>\n" " <Point>\n" " <coordinates>10.63795,55.83362,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Texas Ranch Klippinge</name>\n" " <address>Kirkeskovvej 30\n" "4672 Klippinge</address>\n" " <phoneNumber>+45 46 40 37 32</phoneNumber>\n" " <Point>\n" " <coordinates>12.29922,55.33253,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Tivoli København V</name>\n" " <address>Vesterbrogade 3\n" "1611 København V</address>\n" " <phoneNumber>+45 33 15 10 01</phoneNumber>\n" " <Point>\n" " <coordinates>12.56816,55.67368,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Tivoli Friheden Aarhus C</name>\n" " <address>Skovbrynet 5\n" "8000 Aarhus C</address>\n" " <phoneNumber>+45 86 14 73 00</phoneNumber>\n" " <Point>\n" " <coordinates>10.19589,56.13718,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Vallø Stifts Camping Minigolf Køge</name>\n" " <address>Strandvejen 102\n" "4600 Køge</address>\n" " <Point>\n" " <coordinates>12.19201,55.44575,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " <Placemark>\n" " <styleUrl>#icon243</styleUrl>\n" " <name>Vollerup Minigolf &amp; Legeplads Sønderborg</name>\n" " <address>Mommarkvej 22\n" "6400 Sønderborg</address>\n" " <phoneNumber>+45 74 42 39 90</phoneNumber>\n" " <Point>\n" " <coordinates>9.85457,54.92542,0</coordinates>\n" " </Point>\n" " </Placemark>\n" " </Folder>\n" " </Folder>\n" "</Folder>\n" "</kml>\n") matches = re.finditer(regex, test_str) for matchNum, match in enumerate(matches, start=1): print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group())) for groupNum in range(0, len(match.groups())): groupNum = groupNum + 1 print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum))) # Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html