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
  • Match everything enclosed
    (?:...)
  • Capture everything enclosed
    (...)
  • 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
No Match

r"
"
gm

Test String

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<disabled># *)?(?P<min>\\*/\\d+|\\*|(?:\\d+,?)+)(?: )(?P<hour>\\*/\\d+|\\*|(?:\\d+,?)+)(?: )(?P<day>\\*/\\d+|\\*|(?:\\d+,?)+)(?: )(?P<month>\\*/\\d+|\\*|(?:\\d+,?)+)(?: )(?P<dayofweek>\\*/\\d+|\\*|(?:\\d+,?)+)"; final String string = "PATH=/home/minecraft/.virtualenvs/charfred/bin:/usr/local/bin:/bin:/usr/bin:/home/minecraft/bin:/usr/local/sbin:/usr/sbin\n\n" + "# Don't touch the above, pretty please!\n" + "# =====================================================================\n" + "# === These are my jobs, they may not be pretty, but they are mine. ===\n" + "# =====================================================================\n" + "#\n" + "# This first one is an example job for the replacement to STC_Control:\n" + "#\n" + "# */5 * * * * spiffy status Revelation >> /home/minecraft/logs/test.log 2>&1\n" + "#\n" + "# =====================================================================\n" + "# Variables here! Less typing, more lazy!:\n\n" + "# Paths to log directories:\n" + "ETERNALLOGS=/home/minecraft/logs/Eternal\n" + "ETERNALVIPLOGS=/home/minecraft/logs/EternalVIP\n" + "REVELATIONLOGS=/home/minecraft/logs/Revelation\n" + "ENIGMATICALOGS=/home/minecraft/logs/Enigmatica\n" + "BUNGEELOGS=/home/minecraft/logs/Bungee\n" + "BACKUPLOGS=/home/minecraft/logs/Backups\n" + "CHARFREDLOGS=/home/minecraft/logs/Charfred_III\n" + "PO3LOGS=/home/minecraft/logs/PO3\n" + "DDSSLOGS=/home/minecraft/logs/DDSS\n" + "BURIEDLOGS=/home/minecraft/logs/Buried\n" + "DIREWOLF147LOGS=/home/minecraft/logs/Direwolf147\n" + "TFCRLOGS=/home/minecraft/logs/TFCR\n\n" + "# ================\n" + "# Real jobs below:\n" + "# == ~~~~~~~~~~ ==\n\n" + "# -~- Start Servers on Reboot -~-\n" + "@reboot spiffy start Eternal >> $ETERNALLOGS/startup.log 2>&1\n" + "@reboot spiffy start EternalVIP >> $ETERNALVIPLOGS/startup.log 2>&1\n" + "@reboot spiffy start Revelation >> $REVELATIONLOGS/startup.log 2>&1\n" + "@reboot spiffy start Enigmatica >> $ENIGMATICALOGS/startup.log 2>&1\n" + "@reboot spiffy start PO3 >> $PO3LOGS/startup.log 2>&1\n" + "@reboot spiffy start DDSS >> $DDSSLOGS/startup.log 2>&1\n" + "# @reboot spiffy start Buried >> $BURIEDLOGS/startup.log 2>&1\n" + "# @reboot spiffy start Direwolf147 >> $DIREWOLF147/startup.log 2>&1\n\n" + "# -~- Server Online Keeper -~-\n" + "*/15 * * * * spiffy start Eternal >> $ETERNALLOGS/failsafe.log 2>&1\n" + "*/15 * * * * spiffy start EternalVIP >> $ETERNALVIPLOGS/failsafe.log 2>&1\n" + "*/15 * * * * spiffy start Revelation >> $REVELATIONLOGS/failsafe.log 2>&1\n" + "*/15 * * * * spiffy start Enigmatica >> $ENIGMATICALOGS/failsafe.log 2>&1\n" + "# */15 * * * * spiffy start PO3 >> $PO3LOGS/failsafe.log 2>&1\n" + "*/15 * * * * spiffy start DDSS >> $DDSSLOGS/failsafe.log 2>&1\n" + "# */15 * * * * spiffy start Buried >> $BURIEDLOGS/failsafe.log 2>&1\n" + "# */15 * * * * spiffy start Direwolf147 >> $DIREWOLF147LOGS/failsafe.log 2>&1\n\n" + "# -~- Scheduled Restarts -~-\n" + "0 7,19 * * * spiffy restart Revelation 10m >> $REVELATIONLOGS/restarts.log 2>&1\n" + "0 8,14,20,2 * * * spiffy restart Enigmatica 10m >> $ENIGMATICALOGS/restarts.log 2>&1\n" + "0 5,9,13,17,21,1 * * * spiffy restart DDSS 10m >> $DDSSLOGS/restarts.log 2>&1\n" + "30 2,8,14,20 * * * spiffy restart PO3 10m >> $PO3LOGS/restarts.log 2>&1\n" + "30 5,9,13,17,21,1 * * * spiffy restart Eternal 10m >> $ETERNALLOGS/restarts.log 2>&1\n" + "30 3,11,19 * * * spiffy restart EternalVIP 10m >> $ETERNALVIPLOGS/restarts.log 2>&1\n\n\n" + "# -~- World Backups -~-\n" + "# ===== Info =====\n" + "# Each backup takes about 4 minutes on the larger worlds and taxes one CPU core to 100%;\n" + "# If multiple servers are specified in the same command, they'll be done sequentially,\n" + "# meaning that backing up 4 servers in one command will take about 16min total.\n" + "# === End Info ===\n" + "0,10,20,30 0,4,8,12,16,20 * * * spiffy backup PO3 >> $BACKUPLOGS/po3.log 2>&1\n" + "30 0,4,8,12,16,20 * * * spiffy backup DDSS >> $BACKUPLOGS/DDSS.log 2>&1\n" + "# 0 1,5,9,13,17,21 * * * spiffy backup Direwolf147 >> $BACKUPLOGS/Direwolf147.log 2>&1\n" + "30 1,5,9,13,17,21 * * *spiffy backup Revelation >> $REVELATIONLOGS/Revelation.log 2>&1\n" + "# 0 2,6,10,14,18,22 * * * spiffy backup Buried >> $BACKUPLOGS/buried.log 2>&1\n" + "30 2,6,10,14,18,22 * * * spiffy backup Enigmatica >> $BACKUPLOGS/enigmatica.log 2>&1\n" + "0 3,7,11,15,19,23 * * * spiffy backup Eternal >> $BACKUPLOGS/eternal.log 2>&1\n" + "15 1,5,9,13,17,21 * * * spiffy backup EternalVIP >> $BACKUPLOGS/eternalvip.log 2>&1\n\n" + "# -~- Quest Backups -~-\n" + "*/15 * * * * spiffy questbackup DDSS >> $BACKUPLOGS/quests.log 2>&1\n" + "*/15 * * * * spiffy questbackup PO3 >> $BACKUPLOGS/quests.log 2>&1\n" + "*/15 * * * * spiffy questbackup Enigmatica >> $BACKUPLOGS/quests.log 2>&1\n" + "*/15 * * * * spiffy questbackup Eternal >> $BACKUPLOGS/quests.log 2>&1\n" + "*/15 * * * * spiffy questbackup EternalVIP >> $BACKUPLOGS/quests.log 2>&1\n\n" + "# -~- Charfred_III related Jobs -~-\n" + "@reboot /home/minecraft/charloader.zsh\n\n" + "# -~- inotify watcher for betterquesting -~-\n" + "# @reboot screen -h 100 -dmS charredobserverI /home/minecraft/directorywatchforjinspleasure.zsh\n"; final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); final Matcher matcher = pattern.matcher(string); while (matcher.find()) { System.out.println("Full match: " + matcher.group(0)); for (int i = 1; i <= matcher.groupCount(); i++) { System.out.println("Group " + i + ": " + matcher.group(i)); } } } }

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