Regular Expressions 101

Save & Manage Regex

  • Current Version: 1
  • Save & Share
  • Community Library

Flavor

  • PCRE2 (PHP)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java
  • .NET 7.0 (C#)
  • Rust
  • PCRE (Legacy)
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests
Sponsors
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
Processing...

Test String

Substitution
Processing...

Code Generator

Generated Code

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String[] args) { final String regex = "(<(?P<tag1>\\w+)>)\\n(?'tag2'[\\w\\<\\>.]+)\\n<\\/(?P=tag1)>"; final String string = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n" + "<Annotations>\n" + "<Version>\n" + "1\n" + "</Version>\n" + "<Container>\n" + "<PageNumber>\n" + "1\n" + "</PageNumber>\n" + "<Size>\n" + "<Width>\n" + "3979.2\n" + "</Width>\n" + "<Height>\n" + "5611.2\n" + "</Height>\n" + "</Size>\n" + "<Offset>\n" + "<X>\n" + "0\n" + "</X>\n" + "<Y>\n" + "0\n" + "</Y>\n" + "</Offset>\n" + "<CalibrationScale>\n" + "1\n" + "</CalibrationScale>\n" + "<IsVisible>\n" + "true\n" + "</IsVisible>\n" + "<IsEnabled>\n" + "true\n" + "</IsEnabled>\n" + "<UserData>\n" + "</UserData>\n" + "<CalibrationUnit>\n" + "0\n" + "</CalibrationUnit>\n" + "<Objects>\n" + "<OnLoad>\n" + "<RotateAngle>\n" + "0\n" + "</RotateAngle>\n" + "<ScaleX>\n" + "1\n" + "</ScaleX>\n" + "<ScaleY>\n" + "1\n" + "</ScaleY>\n" + "<Offset>\n" + "<X>\n" + "0\n" + "</X>\n" + "<Y>\n" + "0\n" + "</Y>\n" + "</Offset>\n" + "</OnLoad>\n" + "<Object>\n" + "<ObjectType>\n" + "Leadtools.Annotations.Engine.AnnStampObject\n" + "</ObjectType>\n" + "<AssemblyName>\n" + "Leadtools.Annotations.Engine\n" + "</AssemblyName>\n" + "<OnLoad>\n" + "<RotateAngle>\n" + "0\n" + "</RotateAngle>\n" + "<ScaleX>\n" + "1\n" + "</ScaleX>\n" + "<ScaleY>\n" + "1\n" + "</ScaleY>\n" + "<Offset>\n" + "<X>\n" + "0\n" + "</X>\n" + "<Y>\n" + "0\n" + "</Y>\n" + "</Offset>\n" + "</OnLoad>\n" + "<IsVisible>\n" + "true\n" + "</IsVisible>\n" + "<IsSelected>\n" + "false\n" + "</IsSelected>\n" + "<IsLocked>\n" + "false\n" + "</IsLocked>\n" + "<Password>\n" + "</Password>\n" + "<GroupName/>\n" + "<Hyperlink/>\n" + "<FixedStateOperations>\n" + "8\n" + "</FixedStateOperations>\n" + "<RotateGripper>\n" + "240\n" + "</RotateGripper>\n" + "<RotateCenter>\n" + "<X>\n" + "NaN\n" + "</X>\n" + "<Y>\n" + "NaN\n" + "</Y>\n" + "</RotateCenter>\n" + "<Points>\n" + "<Point>\n" + "<X>\n" + "2400\n" + "</X>\n" + "<Y>\n" + "741.6\n" + "</Y>\n" + "</Point>\n" + "<Point>\n" + "<X>\n" + "4029.6\n" + "</X>\n" + "<Y>\n" + "741.6\n" + "</Y>\n" + "</Point>\n" + "<Point>\n" + "<X>\n" + "4029.6\n" + "</X>\n" + "<Y>\n" + "1380\n" + "</Y>\n" + "</Point>\n" + "<Point>\n" + "<X>\n" + "2400\n" + "</X>\n" + "<Y>\n" + "1380\n" + "</Y>\n" + "</Point>\n" + "</Points>\n" + "<Fill/>\n" + "<Labels>\n" + "<Label>\n" + "<Key>\n" + "AnnObjectName\n" + "</Key>\n" + "<IsVisible>\n" + "false\n" + "</IsVisible>\n" + "<LabelRestriction>\n" + "0\n" + "</LabelRestriction>\n" + "<Text/>\n" + "<OriginalPosition>\n" + "<X>\n" + "2400\n" + "</X>\n" + "<Y>\n" + "741.6\n" + "</Y>\n" + "</OriginalPosition>\n" + "<Offset>\n" + "<X>\n" + "NaN\n" + "</X>\n" + "<Y>\n" + "NaN\n" + "</Y>\n" + "</Offset>\n" + "<Background/>\n" + "<Foreground>\n" + "<SolidColorBrush>\n" + "<Color>\n" + "Transparent \n" + "</Color>\n" + "</SolidColorBrush>\n" + "</Foreground>\n" + "<Font>\n" + "<FamilyName>\n" + "Arial\n" + "</FamilyName>\n" + "<Size>\n" + "11\n" + "</Size>\n" + "<Stretch>\n" + "Normal\n" + "</Stretch>\n" + "<Weight>\n" + "Normal\n" + "</Weight>\n" + "<Style>\n" + "Normal\n" + "</Style>\n" + "<TextDecoration>\n" + "0\n" + "</TextDecoration>\n" + "</Font>\n" + "<OffsetHeight>\n" + "true\n" + "</OffsetHeight>\n" + "</Label>\n" + "</Labels>\n" + "<Stroke>\n" + "<Fill>\n" + "<SolidColorBrush>\n" + "<Color>\n" + "Transparent\n" + "</Color>\n" + "</SolidColorBrush>\n" + "</Fill>\n" + "<Thickness>\n" + "0\n" + "</Thickness>\n" + "<MiterLimit>\n" + "0\n" + "</MiterLimit>\n" + "<DashCap>\n" + "Flat\n" + "</DashCap>\n" + "<StartLineCap>\n" + "Round\n" + "</StartLineCap>\n" + "<EndLineCap>\n" + "Round\n" + "</EndLineCap>\n" + "<LineJoin>\n" + "Round\n" + "</LineJoin>\n" + "<DashOffset>\n" + "0\n" + "</DashOffset>\n" + "<Dashes/>\n" + "<StrokeAlignment>\n" + "Center\n" + "</StrokeAlignment>\n" + "</Stroke>\n" + "<SelectionStroke>\n" + "<Fill>\n" + "<SolidColorBrush>\n" + "<Color>\n" + "Blue\n" + "</Color>\n" + "</SolidColorBrush>\n" + "</Fill>\n" + "<Thickness>\n" + "4\n" + "</Thickness>\n" + "<MiterLimit>\n" + "0\n" + "</MiterLimit>\n" + "<DashCap>\n" + "Flat\n" + "</DashCap>\n" + "<StartLineCap>\n" + "Round\n" + "</StartLineCap>\n" + "<EndLineCap>\n" + "Round\n" + "</EndLineCap>\n" + "<LineJoin>\n" + "Round\n" + "</LineJoin>\n" + "<DashOffset>\n" + "0\n" + "</DashOffset>\n" + "<Dashes/>\n" + "<StrokeAlignment>\n" + "Center\n" + "</StrokeAlignment>\n" + "</SelectionStroke>\n" + "<Font>\n" + "<FamilyName>\n" + "Arial\n" + "</FamilyName>\n" + "<Size>\n" + "11\n" + "</Size>\n" + "<Stretch>\n" + "Normal\n" + "</Stretch>\n" + "<Weight>\n" + "Normal\n" + "</Weight>\n" + "<Style>\n" + "Normal\n" + "</Style>\n" + "<TextDecoration>\n" + "0\n" + "</TextDecoration>\n" + "</Font>\n" + "<ObjectId>\n" + "-16\n" + "</ObjectId>\n" + "<ObjectTag/>\n" + "<Metadata>\n" + "<Item>\n" + "<Key>\n" + "Subject\n" + "</Key>\n" + "<Value>\n" + "Annotate_1 \n" + "</Value>\n" + "</Item>\n" + "<Item>\n" + "<Key>\n" + "Author\n" + "</Key>\n" + "<Value>\n" + "Author1\n" + "</Value>\n" + "</Item>\n" + "<Item>\n" + "<Key>\n" + "Modified\n" + "</Key>\n" + "<Value>\n" + "2021-03-04 21:50:12\n" + "</Value>\n" + "</Item>\n" + "<Item>\n" + "<Key>\n" + "Title\n" + "</Key>\n" + "<Value>\n" + "cvadmin \n" + "</Value>\n" + "</Item>\n" + "<Item>\n" + "<Key>\n" + "Content\n" + "</Key>\n" + "<Value>\n" + "SIGN_cvadmin 3/4/2021 9:49:54 PM\n" + "</Value>\n" + "</Item>\n" + "<Item>\n" + "<Key>\n" + "Created\n" + "</Key>\n" + "<Value>\n" + "2021-03-04 21:50:12\n" + "</Value>\n" + "</Item>\n" + "</Metadata>\n" + "<Reviews/>\n" + "<UserId/>\n" + "<LayerId/>\n" + "<Opacity>\n" + "1\n" + "</Opacity>\n" + "<Picture>\n" + "<PictureData>\n" + "Null\n" + "</PictureData>\n" + "<PictureSource>\n" + "D:/GitLeadtools20And21MergedWorkSpace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/CVWeb/Temp/Apurba DB/272/12102/2.png\n" + "</PictureSource>\n" + "<PictureWidth>\n" + "4710.973077661264\n" + "</PictureWidth>\n" + "<PictureHeight>\n" + "1295.5175963568474\n" + "</PictureHeight>\n" + "</Picture>\n" + "</Object>\n" + "</Objects>\n" + "</Container>\n" + "</Annotations>"; final String subst = "<${tag1}>\\n\\t${tag2}\\n</${tag1}>"; final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); final Matcher matcher = pattern.matcher(string); // The substituted value will be contained in the result variable final String result = matcher.replaceAll(subst); System.out.println("Substitution result: " + result); } }

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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html