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

/
/
gxm

Test String

Code Generator

Generated Code

#include <StringConstants.au3> ; to declare the Constants of StringRegExp #include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate Local $sRegex = "(?xm)^[ \t]*(?:(?<label>[a-zA-Z0-9_]+):[ \t]*)?" & @CRLF & _ "(?:" & @CRLF & _ " (?<op>[a-zA-Z0-9_\.]+)" & @CRLF & _ " (?:" & @CRLF & _ " (?:" & @CRLF & _ " (?:" & @CRLF & _ " [ \t]*" & @CRLF & _ " (?:" & @CRLF & _ " (?<h0>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _ " | " & @CRLF & _ " (?<o0>[-+]?[0oO][0-7]+)" & @CRLF & _ " | " & @CRLF & _ " (?<b0>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _ " |" & @CRLF & _ " (?<l0>[a-zA-Z0-9_]+)" & @CRLF & _ " |" & @CRLF & _ " (?<d0>[-+]?\#?\d+)" & @CRLF & _ " )" & @CRLF & _ " [ \t]*" & @CRLF & _ " (?:\((?<r0b>\$[a-zA-Z0-9_]{2,5})\))?[ \t]*" & @CRLF & _ " )" & @CRLF & _ " |" & @CRLF & _ " [ \t]*(?<r0>\$[a-zA-Z0-9_]{2,5})[ \t]*" & @CRLF & _ " (?:" & @CRLF & _ " (?:" & @CRLF & _ " ,[ \t]*" & @CRLF & _ " (?:" & @CRLF & _ " (?<d1>[-+]?\#?\d+)" & @CRLF & _ " | " & @CRLF & _ " (?<h1>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _ " | " & @CRLF & _ " (?<o1>[-+]?[0oO][0-7]+)" & @CRLF & _ " | " & @CRLF & _ " (?<b1>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _ " |" & @CRLF & _ " (?<l1>[a-zA-Z0-9_]+)" & @CRLF & _ " )" & @CRLF & _ " [ \t]*" & @CRLF & _ " (?:\((?<r1b>\$[a-zA-Z0-9_]{2,5})\))?[ \t]*" & @CRLF & _ " )" & @CRLF & _ " |" & @CRLF & _ " ,[ \t]*(?<r1>\$[a-zA-Z0-9_]{2,5})[ \t]*" & @CRLF & _ " (?:" & @CRLF & _ " (?:" & @CRLF & _ " ,[ \t]*" & @CRLF & _ " (?:" & @CRLF & _ " (?<d2>[-+]?\#?\d+)" & @CRLF & _ " | " & @CRLF & _ " (?<h2>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _ " | " & @CRLF & _ " (?<o2>[-+]?[0oO][0-7]+)" & @CRLF & _ " | " & @CRLF & _ " (?<b2>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _ " |" & @CRLF & _ " (?<l2>[a-zA-Z0-9_]+)" & @CRLF & _ " )" & @CRLF & _ " [ \t]*" & @CRLF & _ " (?:\((?<r2b>\$[a-zA-Z0-9_]{2,5})\))?[ \t]*" & @CRLF & _ " )" & @CRLF & _ " |" & @CRLF & _ " ,[ \t]*(?<r2>\$[a-zA-Z0-9_]{2,5})[ \t]*" & @CRLF & _ " )?" & @CRLF & _ " )?" & @CRLF & _ " )?" & @CRLF & _ " )?" & @CRLF & _ ")?" & @CRLF & _ "(?<pseudo_op>" & @CRLF & _ " \." & @CRLF & _ " (?<name>[a-zA-Z]+)" & @CRLF & _ " [ \t]*" & @CRLF & _ " (?<arg>" & @CRLF & _ " (?<hp0>[-+]?[0oO]?[xX][a-fA-F0-9]{1,8})" & @CRLF & _ " | " & @CRLF & _ " (?<bp0>[-+]?[0oO]?[bB][01]{1,32})" & @CRLF & _ " |" & @CRLF & _ " (?<op0>[-+]?[0oO][0-7]+)" & @CRLF & _ " | " & @CRLF & _ " (?<dp0>[-+]?\#?\d+)" & @CRLF & _ " | " & @CRLF & _ " (?<lp0>[a-zA-Z0-9_]+)" & @CRLF & _ " )" & @CRLF & _ " [ \t]*" & @CRLF & _ ")?" & @CRLF & _ "(?:[ \t]*(?<comment>[!;].*)?)" & @CRLF & _ "$" Local $sString = "!============================================================" & @CRLF & _ "! CS-2200 Homework 1" & @CRLF & _ "!" & @CRLF & _ "! Please do not change main's functionality," & @CRLF & _ "! except to change the argument for factorial or to meet your" & @CRLF & _ "! calling convention" & @CRLF & _ "!============================================================" & @CRLF & _ "main: la $sp, stack ! load address of stack label into $sp" & @CRLF & _ " lw $sp, 0($sp) ! FIXME: load desired value of the stack" & @CRLF & _ " ! (defined at the label below) into $sp" & @CRLF & _ " la $at, factorial ! load address of factorial label into $at" & @CRLF & _ " addi $a0, $zero, 5 ! $a0 = 5, the number to factorialize" & @CRLF & _ " jalr $at, $ra ! jump to factorial, set $ra to return addr" & @CRLF & _ " halt ! when we return, just halt" & @CRLF & _ "factorial: " & @CRLF & _ " sw $a0, 0($sp) ! put i, the first parameter, on stack" & @CRLF & _ " addi $sp, $sp, -4 ! leave space for argument, return value, return address, and old frame pointer" & @CRLF & _ " sw $fp, 1($sp) ! store old frame pointer" & @CRLF & _ " addi $fp, $sp, 0 ! frame pointer points to first local variable " & @CRLF & _ " sw $ra, 2($fp) ! store return address" & @CRLF & _ " lw $t0, 4($fp) ! load i to $t0" & @CRLF & _ " beq $t0, $zero, base ! if i == 0, branch to base case" & @CRLF & _ " addi $a0, $t0, -1 ! $a0 = i - 1" & @CRLF & _ " addi $sp, $sp, -1 ! start a new frame" & @CRLF & _ " jalr $at, $ra ! calls factorial(i - 1)" & @CRLF & _ " lw $t2, 0($sp) ! $t2 = factorial(i - 1)" & @CRLF & _ " addi $sp, $sp, 2 ! pop return value and argument from stack" & @CRLF & _ " lw $t0, 4($fp) ! load argument from run-time stack" & @CRLF & _ " addi $t1, $zero, 0 ! $t1 is the counter" & @CRLF & _ " addi $v0, $zero, 0 ! initialize $v0 as 0" & @CRLF & _ "mult: beq $t1, $t2, exit ! branch to exit if equal" & @CRLF & _ " add $v0, $v0, $t0" & @CRLF & _ " addi $t1, $t1, 1" & @CRLF & _ " beq $zero, $zero, mult" & @CRLF & _ "base: addi $v0, $zero, 1 ! $v0 stores 1" & @CRLF & _ " sw $v0, 0($fp) ! store result in memory for fn" & @CRLF & _ "return: lw $v0, 0($fp) ! load return value from fn" & @CRLF & _ " sw $v0, 3($fp) ! save return value" & @CRLF & _ " lw $ra, 2($fp) ! restore return address" & @CRLF & _ " addi $sp, $fp, 3 ! stack pointer points to return value" & @CRLF & _ " lw $fp, 1($fp) ! restore frame pointer" & @CRLF & _ " jalr $ra, $zero ! return" & @CRLF & _ "exit: sw $v0, 0($fp) ! store result in memory for fn" & @CRLF & _ " beq $zero, $zero, return" & @CRLF & _ "stack: .word 0x4000 ! the stack begins here (for example, that is)" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "" Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH) Local $aFullArray[0] For $i = 0 To UBound($aArray) -1 _ArrayConcatenate($aFullArray, $aArray[$i]) Next $aArray = $aFullArray ; Present the entire match result _ArrayDisplay($aArray, "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 AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm