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

use strict; my $str = 'PATH=/home/minecraft/.virtualenvs/charfred/bin:/usr/local/bin:/bin:/usr/bin:/home/minecraft/bin:/usr/local/sbin:/usr/sbin # Don\'t touch the above, pretty please! # ===================================================================== # === These are my jobs, they may not be pretty, but they are mine. === # ===================================================================== # # This first one is an example job for the replacement to STC_Control: # # */5 * * * * spiffy status Revelation >> /home/minecraft/logs/test.log 2>&1 # # ===================================================================== # Variables here! Less typing, more lazy!: # Paths to log directories: ETERNALLOGS=/home/minecraft/logs/Eternal ETERNALVIPLOGS=/home/minecraft/logs/EternalVIP REVELATIONLOGS=/home/minecraft/logs/Revelation ENIGMATICALOGS=/home/minecraft/logs/Enigmatica BUNGEELOGS=/home/minecraft/logs/Bungee BACKUPLOGS=/home/minecraft/logs/Backups CHARFREDLOGS=/home/minecraft/logs/Charfred_III PO3LOGS=/home/minecraft/logs/PO3 DDSSLOGS=/home/minecraft/logs/DDSS BURIEDLOGS=/home/minecraft/logs/Buried DIREWOLF147LOGS=/home/minecraft/logs/Direwolf147 TFCRLOGS=/home/minecraft/logs/TFCR # ================ # Real jobs below: # == ~~~~~~~~~~ == # -~- Start Servers on Reboot -~- @reboot spiffy start Eternal >> $ETERNALLOGS/startup.log 2>&1 @reboot spiffy start EternalVIP >> $ETERNALVIPLOGS/startup.log 2>&1 @reboot spiffy start Revelation >> $REVELATIONLOGS/startup.log 2>&1 @reboot spiffy start Enigmatica >> $ENIGMATICALOGS/startup.log 2>&1 @reboot spiffy start PO3 >> $PO3LOGS/startup.log 2>&1 @reboot spiffy start DDSS >> $DDSSLOGS/startup.log 2>&1 # @reboot spiffy start Buried >> $BURIEDLOGS/startup.log 2>&1 # @reboot spiffy start Direwolf147 >> $DIREWOLF147/startup.log 2>&1 # -~- Server Online Keeper -~- */15 * * * * spiffy start Eternal >> $ETERNALLOGS/failsafe.log 2>&1 */15 * * * * spiffy start EternalVIP >> $ETERNALVIPLOGS/failsafe.log 2>&1 */15 * * * * spiffy start Revelation >> $REVELATIONLOGS/failsafe.log 2>&1 */15 * * * * spiffy start Enigmatica >> $ENIGMATICALOGS/failsafe.log 2>&1 # */15 * * * * spiffy start PO3 >> $PO3LOGS/failsafe.log 2>&1 */15 * * * * spiffy start DDSS >> $DDSSLOGS/failsafe.log 2>&1 # */15 * * * * spiffy start Buried >> $BURIEDLOGS/failsafe.log 2>&1 # */15 * * * * spiffy start Direwolf147 >> $DIREWOLF147LOGS/failsafe.log 2>&1 # -~- Scheduled Restarts -~- 0 7,19 * * * spiffy restart Revelation 10m >> $REVELATIONLOGS/restarts.log 2>&1 0 8,14,20,2 * * * spiffy restart Enigmatica 10m >> $ENIGMATICALOGS/restarts.log 2>&1 0 5,9,13,17,21,1 * * * spiffy restart DDSS 10m >> $DDSSLOGS/restarts.log 2>&1 30 2,8,14,20 * * * spiffy restart PO3 10m >> $PO3LOGS/restarts.log 2>&1 30 5,9,13,17,21,1 * * * spiffy restart Eternal 10m >> $ETERNALLOGS/restarts.log 2>&1 30 3,11,19 * * * spiffy restart EternalVIP 10m >> $ETERNALVIPLOGS/restarts.log 2>&1 # -~- World Backups -~- # ===== Info ===== # Each backup takes about 4 minutes on the larger worlds and taxes one CPU core to 100%; # If multiple servers are specified in the same command, they\'ll be done sequentially, # meaning that backing up 4 servers in one command will take about 16min total. # === End Info === 0,10,20,30 0,4,8,12,16,20 * * * spiffy backup PO3 >> $BACKUPLOGS/po3.log 2>&1 30 0,4,8,12,16,20 * * * spiffy backup DDSS >> $BACKUPLOGS/DDSS.log 2>&1 # 0 1,5,9,13,17,21 * * * spiffy backup Direwolf147 >> $BACKUPLOGS/Direwolf147.log 2>&1 30 1,5,9,13,17,21 * * *spiffy backup Revelation >> $REVELATIONLOGS/Revelation.log 2>&1 # 0 2,6,10,14,18,22 * * * spiffy backup Buried >> $BACKUPLOGS/buried.log 2>&1 30 2,6,10,14,18,22 * * * spiffy backup Enigmatica >> $BACKUPLOGS/enigmatica.log 2>&1 0 3,7,11,15,19,23 * * * spiffy backup Eternal >> $BACKUPLOGS/eternal.log 2>&1 15 1,5,9,13,17,21 * * * spiffy backup EternalVIP >> $BACKUPLOGS/eternalvip.log 2>&1 # -~- Quest Backups -~- */15 * * * * spiffy questbackup DDSS >> $BACKUPLOGS/quests.log 2>&1 */15 * * * * spiffy questbackup PO3 >> $BACKUPLOGS/quests.log 2>&1 */15 * * * * spiffy questbackup Enigmatica >> $BACKUPLOGS/quests.log 2>&1 */15 * * * * spiffy questbackup Eternal >> $BACKUPLOGS/quests.log 2>&1 */15 * * * * spiffy questbackup EternalVIP >> $BACKUPLOGS/quests.log 2>&1 # -~- Charfred_III related Jobs -~- @reboot /home/minecraft/charloader.zsh # -~- inotify watcher for betterquesting -~- # @reboot screen -h 100 -dmS charredobserverI /home/minecraft/directorywatchforjinspleasure.zsh '; my $regex = qr/^(?P<disabled># *)?(?P<min>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<hour>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<day>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<month>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<dayofweek>\*/\d+|\*|(?:\d+,?)+)/mp; if ( $str =~ /$regex/g ) { print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n"; # print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n"; # print "Capture Group 2 is $2 ... and so on\n"; } # ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p' # Named capture groups can be called via $+{name}

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 Perl, please visit: http://perldoc.perl.org/perlre.html