Regular Expressions 101

Save & Share

  • Regex Version: ver. 3
  • Update Regex
    ctrl+⇧+s
  • Save new Regex
    ctrl+s
  • Add to Community Library

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

/
/
gm

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 = "(?m)(?<!\w)\b[A-Z]+[\_]*[A-Z]*\b(?=\s)" Local $sString = "; v1.1.31.01'de tüm desktoplarda çalışır" & @CRLF & _ "" & @CRLF & _ "#NoEnv ; Uyumlukuk için A_ ön eki ile ortam değişkenlerini kullanın" & @CRLF & _ "#SingleInstance Force ; Sadece 1 kez açalıştırabilire" & @CRLF & _ " " & @CRLF & _ "#KeyHistory 0 ; Tuş basımları loglamayı engeller" & @CRLF & _ "" & @CRLF & _ "SetBatchLines, -1 ; Scripti sürekli olarak çalıştırma (nromalde her saniye 10ms uyur)" & @CRLF & _ "ListLines, Off ; Derlenen verileri loglamaz" & @CRLF & _ "" & @CRLF & _ "#Warn ; Enable warnings to assist with detecting common errors." & @CRLF & _ "SendMode Input ; Recommended for new scripts due to its superior speed and reliability." & @CRLF & _ "SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory." & @CRLF & _ "" & @CRLF & _ "#MaxThreadsPerHotkey, 1 ; Yanlışlıkla 2 kere buton algılanmasını engeller" & @CRLF & _ "" & @CRLF & _ "VERSION = 1.2.0" & @CRLF & _ "" & @CRLF & _ "; Gizlenmiş pencelerin ID'si" & @CRLF & _ "HidedWindows := []" & @CRLF & _ "" & @CRLF & _ "; TIP: Veri dizini yolu" & @CRLF & _ "DIR_NAME = %A_AppData%\YHotkeys" & @CRLF & _ "" & @CRLF & _ "InstallIcons()" & @CRLF & _ "CreateOrUpdateTrayMenu()" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "IconClicked:" & @CRLF & _ " ToggleMemWindowWithTitle(A_ThisMenuItem)" & @CRLF & _ "Return" & @CRLF & _ "" & @CRLF & _ "ClearAll:" & @CRLF & _ " ClearAllHidedWindows()" & @CRLF & _ "Return" & @CRLF & _ "" & @CRLF & _ "CloseApp:" & @CRLF & _ " ClearAllHidedWindows()" & @CRLF & _ " ExitApp" & @CRLF & _ "Return" & @CRLF & _ "" & @CRLF & _ "class MenuObject {" & @CRLF & _ " ahkID := 0" & @CRLF & _ " title := """ & @CRLF & _ " iconPath := """ & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "InstallIcons() {" & @CRLF & _ " global DIR_NAME" & @CRLF & _ " FileCreateDir, %DIR_NAME%" & @CRLF & _ " FileInstall, .\res\seedling.ico, %DIR_NAME%\seedling.ico, 1" & @CRLF & _ " FileInstall, .\res\default.ico, %DIR_NAME%\default.ico, 1" & @CRLF & _ " FileInstall, .\res\clear.ico, %DIR_NAME%\clear.ico, 1" & @CRLF & _ " FileInstall, .\res\close.ico, %DIR_NAME%\close.ico, 1" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "ClearAllHidedWindows() {" & @CRLF & _ " ahkIDs := GetHidedWindowsIDs()" & @CRLF & _ " For index, ahkID in ahkIDs {" & @CRLF & _ " ToggleWindowWithID(ahkID, True)" & @CRLF & _ " WinKill, ahk_id %ahkID%" & @CRLF & _ " }" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "GetHidedWindowsIDs(){" & @CRLF & _ " ahkIDs := []" & @CRLF & _ " global HidedWindows" & @CRLF & _ " For index, item in HidedWindows {" & @CRLF & _ " ahkIDs.Push(item.ahkID)" & @CRLF & _ " }" & @CRLF & _ "return ahkIDs" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "GetHidedWindowsIDWithTitle(title){" & @CRLF & _ " global HidedWindows" & @CRLF & _ " For index, item in HidedWindows {" & @CRLF & _ " if (item.title == title) {" & @CRLF & _ " return item.ahkID" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "return 0" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "GetHidedWindowsIndexWithID(ahkID){" & @CRLF & _ " global HidedWindows" & @CRLF & _ " For index, item in HidedWindows {" & @CRLF & _ " if (item.ahkID == ahkID) {" & @CRLF & _ " return index" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "return 0" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "ToggleMemWindowWithTitle(menuName) {" & @CRLF & _ " ahkID := GetHidedWindowsIDWithTitle(menuName)" & @CRLF & _ " if ahkID" & @CRLF & _ " ToggleWindowWithID(ahkID, True)" & @CRLF & _ " else" & @CRLF & _ " Run https://github.com/yedhrab/YHotkeys" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "RunUrl(url) {" & @CRLF & _ " ; WARN: Bazı uygulamarın geç açılması soruna sebep oluyor" & @CRLF & _ " ; BUG: Uygulamalar bazen 2 kere açılıyor" & @CRLF & _ " try {" & @CRLF & _ " SetTitleMatchMode, Slow" & @CRLF & _ " " & @CRLF & _ " RunWait, %url%" & @CRLF & _ " }" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "ActivateWindowWithID(ahkID, wait=True) {" & @CRLF & _ " WinActivate, ahk_id %ahkID%" & @CRLF & _ " if wait" & @CRLF & _ " WinWaitActive, ahk_id %ahkID%" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "ShowHidedWindowWithID(ahkId)" & @CRLF & _ "{" & @CRLF & _ " WinRestore, ahk_id %ahkID%" & @CRLF & _ " WinShow, ahk_id %ahkID%" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "DropFromMem(ahkID){" & @CRLF & _ " index := GetHidedWindowsIndexWithID(ahkID)" & @CRLF & _ " if index {" & @CRLF & _ " global HidedWindows" & @CRLF & _ " HidedWindows.RemoveAt(index)" & @CRLF & _ " }" & @CRLF & _ "return index" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "DropActiveWindowFromTrayMenu(){" & @CRLF & _ " WinGetTitle, title, A" & @CRLF & _ " Menu, Tray, Delete, %title%" & @CRLF & _ " global HidedWindows" & @CRLF & _ " if !HidedWindows.Length()" & @CRLF & _ " Menu, Tray, Delete, Temizle" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "DropActiveWindowFromMem(){" & @CRLF & _ " WinGet, ahkID, ID, A" & @CRLF & _ " " & @CRLF & _ "return DropFromMem(ahkID)" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "KeepInMem(ahkID, title, iconPath) {" & @CRLF & _ " item := new MenuObject" & @CRLF & _ " " & @CRLF & _ " item.ahkID := ahkID" & @CRLF & _ " item.title := title" & @CRLF & _ " item.iconPath := iconPath" & @CRLF & _ " " & @CRLF & _ " global HidedWindows" & @CRLF & _ " HidedWindows.Push(item)" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "; Gizlenmeden önce kullanılmazsa id alamaz" & @CRLF & _ "KeepActiveWindowInMem() {" & @CRLF & _ " WinGetActiveTitle, title" & @CRLF & _ " WinGet, ahkID, ID, A" & @CRLF & _ " WinGet, iconPath, ProcessPath, A" & @CRLF & _ " " & @CRLF & _ " KeepInMem(ahkID, title, iconPath)" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "AddTrayMenuIcon(title, iconPath, default=True) {" & @CRLF & _ " if FileExist(iconPath) {" & @CRLF & _ " Menu, Tray, Icon, %title%, %iconPath%,, 20" & @CRLF & _ " } else if default {" & @CRLF & _ " global DIR_NAME" & @CRLF & _ " iconPath := DIR_NAME . "\default.ico"" & @CRLF & _ " AddTrayMenuIcon(title, iconPath, False)" & @CRLF & _ " }" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "CreateOrUpdateTrayMenu(){" & @CRLF & _ " #Persistent" & @CRLF & _ " Menu, Tray, UseErrorLevel , On" & @CRLF & _ " Menu, Tray, NoStandard" & @CRLF & _ " Menu, Tray, Add, YHotkeys, IconClicked" & @CRLF & _ " " & @CRLF & _ " global VERSION" & @CRLF & _ " Menu, Tray, Tip, YHotkeys v%VERSION% ~ YEmreAk" & @CRLF & _ " Menu, Tray, Click, 1" & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " global DIR_NAME" & @CRLF & _ " iconPath := DIR_NAME . "\seedling.ico"" & @CRLF & _ " if FileExist(iconPath) {" & @CRLF & _ " Menu, Tray, Icon, %iconPath%,, 20" & @CRLF & _ " iconPath := DIR_NAME . "\seedling.ico"" & @CRLF & _ " AddTrayMenuIcon("YHotkeys", iconPath)" & @CRLF & _ " }" & @CRLF & _ " " & @CRLF & _ " global HidedWindows" & @CRLF & _ " if (HidedWindows.Length() > 0) {" & @CRLF & _ " Menu, Tray, Add, Temizle, ClearAll" & @CRLF & _ " Menu, Tray, Delete, Temizle" & @CRLF & _ " Menu, Tray, Delete, Kapat" & @CRLF & _ " " & @CRLF & _ " iconPath := HidedWindows[HidedWindows.Length()].iconPath" & @CRLF & _ " mainTitle := HidedWindows[HidedWindows.Length()].title" & @CRLF & _ " " & @CRLF & _ " For index, item in HidedWindows {" & @CRLF & _ " title := item.title" & @CRLF & _ " iconPath := item.iconPath" & @CRLF & _ " " & @CRLF & _ " Menu, Tray, Add, %title%, IconClicked" & @CRLF & _ " AddTrayMenuIcon(title, iconPath)" & @CRLF & _ " }" & @CRLF & _ " " & @CRLF & _ " Menu, Tray, Add, Temizle, ClearAll" & @CRLF & _ " " & @CRLF & _ " iconPath := DIR_NAME . "\clear.ico"" & @CRLF & _ " AddTrayMenuIcon("Temizle", iconPath)" & @CRLF & _ " " & @CRLF & _ " } else {" & @CRLF & _ " mainTitle := "YHotkeys"" & @CRLF & _ " }" & @CRLF & _ " " & @CRLF & _ " Menu, Tray, Default, YHotkeys" & @CRLF & _ " Menu, Tray, Add, Kapat, CloseApp" & @CRLF & _ " " & @CRLF & _ " iconPath := DIR_NAME . "\close.ico"" & @CRLF & _ " AddTrayMenuIcon("Kapat", iconPath)" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "SendWindowToTrayByID(ahkID) {" & @CRLF & _ " WinHide ahk_id %ahkID%" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "; WARN: Bug sebebi olabilir (bundan değil bug)" & @CRLF & _ "; WARN: Eğer uyarı mesajı verilirse, odaklanma bozuluyor" & @CRLF & _ "FocusPreviusWindow(ahkID) {" & @CRLF & _ " SendEvent, !{Esc}" & @CRLF & _ " WinWaitNotActive, ahk_id %ahkID%" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "ToggleWindowWithID(ahkID, hide=False) {" & @CRLF & _ " DetectHiddenWindows, Off" & @CRLF & _ " if !WinExist("ahk_id" . ahkID) {" & @CRLF & _ " if hide {" & @CRLF & _ " ShowHidedWindowWithID(ahkID)" & @CRLF & _ " ActivateWindowWithID(ahkID)" & @CRLF & _ " if DropActiveWindowFromMem()" & @CRLF & _ " DropActiveWindowFromTrayMenu()" & @CRLF & _ " CreateOrUpdateTrayMenu()" & @CRLF & _ " } else {" & @CRLF & _ " ActivateWindowWithID(ahkID)" & @CRLF & _ " }" & @CRLF & _ " } else {" & @CRLF & _ " if WinActive("ahk_id" . ahkID) {" & @CRLF & _ " if hide {" & @CRLF & _ " KeepActiveWindowInMem()" & @CRLF & _ " FocusPreviusWindow(ahkID)" & @CRLF & _ " SendWindowToTrayByID(ahkID)" & @CRLF & _ " CreateOrUpdateTrayMenu()" & @CRLF & _ " } else {" & @CRLF & _ " WinMinimize, A" & @CRLF & _ " }" & @CRLF & _ " } else {" & @CRLF & _ " ActivateWindowWithID(ahkID)" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "OpenWindowInTray(selector, name, url, mode=3) {" & @CRLF & _ " SetTitleMatchMode, %mode%" & @CRLF & _ " DetectHiddenWindows, On" & @CRLF & _ " " & @CRLF & _ " IDlist := []" & @CRLF & _ " if (selector == "title") {" & @CRLF & _ " WinGet, IDlist, list, %name%" & @CRLF & _ " } else if (selector == "class") {" & @CRLF & _ " WinGet, IDlist, list, ahk_class %name%" & @CRLF & _ " } else if (selector == "exe") {" & @CRLF & _ " WinGet, IDlist, list, ahk_exe %name%" & @CRLF & _ " }" & @CRLF & _ " " & @CRLF & _ " found := False" & @CRLF & _ " Loop, %IDlist% {" & @CRLF & _ " ahkID := IDlist%A_INDEX%" & @CRLF & _ " if WinExist("ahk_id" . ahkID) {" & @CRLF & _ " WinGetTitle, title" & @CRLF & _ " if (title == "")" & @CRLF & _ " continue" & @CRLF & _ " " & @CRLF & _ " ToggleWindowWithID(ahkID, True)" & @CRLF & _ " found := True" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " if !found" & @CRLF & _ " RunUrl(url)" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "OpenWindowByTitle(title, url, mode=3) {" & @CRLF & _ " SetTitleMatchMode, %mode%" & @CRLF & _ " DetectHiddenWindows, Off" & @CRLF & _ " " & @CRLF & _ " if WinExist(title) {" & @CRLF & _ " WinGet, ahkID, ID, %title%" & @CRLF & _ " ToggleWindowWithID(ahkID, False)" & @CRLF & _ " } else {" & @CRLF & _ " RunUrl(url)" & @CRLF & _ " }" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "GetEnvPath(envvar, path=""){" & @CRLF & _ " EnvGet, prepath, %envvar%" & @CRLF & _ " path = %prepath%%path%" & @CRLF & _ "return path" & @CRLF & _ "}" & @CRLF & _ "" & @CRLF & _ "; ####################################################################################" & @CRLF & _ "; ## ##" & @CRLF & _ "; ## KISAYOLLAR ##" & @CRLF & _ "; ## ##" & @CRLF & _ "; ####################################################################################" & @CRLF & _ "" & @CRLF & _ "; ---------------------------------- Göster / Gizle ----------------------------------" & @CRLF & _ "#q::" & @CRLF & _ " name := "- OneNote"" & @CRLF & _ " path := "shell:appsFolder\Microsoft.Office.OneNote_8wekyb3d8bbwe!microsoft.onenoteim"" & @CRLF & _ " mode := 2" & @CRLF & _ " OpenWindowByTitle(name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "; #t::" & @CRLF & _ "; name := "Tureng Dictionary"" & @CRLF & _ "; path := "shell:appsFolder\24232AlperOzcetin.Tureng_9n2ce2f97t3e6!App"" & @CRLF & _ "; mode := 2" & @CRLF & _ "; OpenWindowByTitle(name, path, mode)" & @CRLF & _ "; return" & @CRLF & _ "" & @CRLF & _ "; --------------------------------- Tray Kısayolları ---------------------------------" & @CRLF & _ "" & @CRLF & _ "#w::" & @CRLF & _ " ; WARN: 4 tane var exe ile ele alınmalı WhatsApp.exe (bundan değil)" & @CRLF & _ " name := "WhatsApp"" & @CRLF & _ " path := "shell:appsFolder\5319275A.WhatsAppDesktop_cv1g1gvanyjgm!WhatsAppDesktop"" & @CRLF & _ " mode := 2" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "#g::" & @CRLF & _ " name := "GitHub Desktop"" & @CRLF & _ " path := GetEnvPath("localappdata", "\GitHubDesktop\GitHubDesktop.exe")" & @CRLF & _ " mode := 3" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "#x::" & @CRLF & _ " name := "Google Calendar"" & @CRLF & _ " path := GetEnvPath("appdata", "\Microsoft\Windows\Start Menu\Programs\Chrome Apps\Google Calendar.lnk")" & @CRLF & _ " mode := 2" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "#e::" & @CRLF & _ " name := "CabinetWClass"" & @CRLF & _ " path := "explorer.exe"" & @CRLF & _ " OpenWindowInTray("class", name, path)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "; Dizin kısayolları PgDn ile başlar" & @CRLF & _ "PgDn & g::" & @CRLF & _ " name := "GitHub"" & @CRLF & _ " path := GetEnvPath("userprofile", "\Documents\GitHub")" & @CRLF & _ " OpenWindowInTray("title", name, path)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "PgDn & s::" & @CRLF & _ " name := "ShareX"" & @CRLF & _ " path := "shell:appsFolder\19568ShareX.ShareX_egrzcvs15399j!ShareX"" & @CRLF & _ " mode := 3" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "PgDn & Shift::" & @CRLF & _ " name := "Startup"" & @CRLF & _ " path := "shell:startup"" & @CRLF & _ " mode := 3" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "PgDn & i::" & @CRLF & _ " name := "Icons"" & @CRLF & _ " path := GetEnvPath("userprofile", "\Google Drive\Pictures\Icons")" & @CRLF & _ " mode := 3" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "PgDn & d::" & @CRLF & _ " name := "Downloads"" & @CRLF & _ " path := "shell:downloads"" & @CRLF & _ " mode := 3" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "PgDn & u::" & @CRLF & _ " name := "Yunus Emre Ak"" & @CRLF & _ " path := GetEnvPath("userprofile")" & @CRLF & _ " mode := 3" & @CRLF & _ " OpenWindowInTray("title", name, path, mode)" & @CRLF & _ "return" & @CRLF & _ "" & @CRLF & _ "; --------------------------------- Buton Kısayolları ---------------------------------" & @CRLF & _ "" & @CRLF & _ "; Değiştirilen butonları kurtarma" & @CRLF & _ "Control & PgDn::" & @CRLF & _ " Send , !{PgDn}" & @CRLF & _ "return" & @CRLF & _ "Control & PgUp::" & @CRLF & _ " Send , !{PgUp}" & @CRLF & _ "return" & @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