Regular Expressions 101

Save & Share

  • Regex Version: ver. 16
  • 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
No Match

/
/
m

Test String

Substitution

Processing...

Code Generator

Generated Code

use strict; my $str = '<dxi-column [filterType]="\'include\'" [dataField]="\'Version\'" [caption]="fieldControlData[\'Version\']?.CaptionDescription" [visible]="fieldControlData[\'Version\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'DeptName\'" [caption]="fieldControlData[\'DeptName\']?.CaptionDescription" [visible]="fieldControlData[\'DeptName\'].visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"></dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'DivName\'" [caption]="fieldControlData[\'DivName\']?.CaptionDescription" [visible]="fieldControlData[\'DivName\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'" [groupIndex]="0"></dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'OwnerName\'" [caption]="fieldControlData[\'OwnerName\']?.CaptionDescription" [visible]="fieldControlData[\'OwnerName\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"></dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'CentralizedDivName\'" [caption]="fieldControlData[\'CentralizedDivName\']?.CaptionDescription" [visible]="fieldControlData[\'CentralizedDivName\']?.visible && currentPlanVersion.Code === \'2\'" [minWidth]="50" [width]="150" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'JobCentralized\'" [caption]="fieldControlData[\'JobCentralized\']?.CaptionDescription" [visible]="fieldControlData[\'JobCentralized\']?.visible && currentPlanVersion.Code === \'2\'" [minWidth]="50" [width]="120" [alignment]="\'center\'" [headerCellTemplate]="\'defaultHeaderTemplate\'"></dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'JobCodeName\'" [caption]="fieldControlData[\'JobCode\']?.CaptionDescription" [visible]="fieldControlData[\'JobCode\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'" [groupIndex]="1"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'JobControlPoolName\'" [caption]="fieldControlData[\'JobControlPoolName\']?.CaptionDescription" [visible]="fieldControlData[\'JobControlPoolName\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'CatName\'" [caption]="fieldControlData[\'CatName\']?.CaptionDescription" [visible]="fieldControlData[\'CatName\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'BudgetItemName\'" [caption]="fieldControlData[\'BudgetItemName\']?.CaptionDescription" [visible]="fieldControlData[\'BudgetItemName\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'AssetName\'" [caption]="fieldControlData[\'AssetName\']?.CaptionDescription" [visible]="fieldControlData[\'AssetName\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'StartDate\'" [caption]="fieldControlData[\'StartDate\']?.CaptionDescription" [visible]="fieldControlData[\'StartDate\']?.visible" [showWhenGrouped]="true" [dataType]="\'date\'" [format]="\'yyyy-MM-dd\'" [alignment]="\'center\'" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'EndDate\'" [caption]="fieldControlData[\'EndDate\']?.CaptionDescription" [visible]="fieldControlData[\'EndDate\']?.visible" [showWhenGrouped]="true" [dataType]="\'date\'" [format]="\'yyyy-MM-dd\'" [alignment]="\'center\'" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'TargetMarginPercent\'" [caption]="fieldControlData[\'TargetMarginPercent\']?.CaptionDescription" [visible]="fieldControlData[\'TargetMarginPercent\']?.visible" [showWhenGrouped]="true" [dataType]="\'number\'" [format]="\'#,##0.00 %\'" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'IsCustDecision\'" [caption]="fieldControlData[\'IsCustDecision\']?.CaptionDescription" [visible]="fieldControlData[\'IsCustDecision\']?.visible" [showWhenGrouped]="true" [dataType]="\'boolean\'" [trueText]="\'Yes ใช่\'" [falseText]="\'No ไม่ใช่\'" [alignment]="\'center\'" [headerCellTemplate]="\'defaultHeaderTemplate\'" [cellTemplate]="\'yesnoCellTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'CustCommitmentPercent\'" [caption]="fieldControlData[\'CustCommitmentPercent\']?.CaptionDescription" [visible]="fieldControlData[\'CustCommitmentPercent\']?.visible" [showWhenGrouped]="true" [dataType]="\'number\'" [format]="\'#,##0.00 %\'" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'BudgetDetail\'" [caption]="fieldControlData[\'BudgetDetail\']?.CaptionDescription" [visible]="fieldControlData[\'BudgetDetail\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'" [width]="200"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'CostElementName\'" [caption]="fieldControlData[\'CostElementName\']?.CaptionDescription" [visible]="fieldControlData[\'CostElementName\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'WorkProgramName\'" [caption]="fieldControlData[\'WorkProgramID\']?.CaptionDescription" [visible]="fieldControlData[\'WorkProgramID\']?.visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'InvestmentTypeCodeName\'" [caption]="fieldControlData[\'InvestmentTypeCodeName\'].CaptionDescription" [visible]="fieldControlData[\'InvestmentTypeCodeName\'].visible" [showWhenGrouped]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ActualAmount\'" [caption]="fieldControlData[\'ActualAmount\']?.CaptionDescription" [visible]="fieldControlData[\'ActualAmount\']?.visible" [headerCellTemplate]="\'defaultHeaderTemplate\'"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'TotalAmount\'" [caption]="fieldControlData[\'TotalAmount\']?.CaptionDescription" [visible]="fieldControlData[\'TotalAmount\']?.visible" [headerCellTemplate]="\'defaultHeaderTemplate\'" [fixedPosition]="\'right\'" [fixed]="true"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'TotalAmountLastYear\'" [caption]="fieldControlData?.TotalAmountLastYear?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanAmount\'" [caption]="fieldControlData[\'PlanAmount\']?.CaptionDescription" [visible]="fieldControlData[\'PlanAmount\']?.visible" [headerCellTemplate]="\'defaultHeaderTemplate\'"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanAmountLastYear\'" [caption]="fieldControlData?.PlanAmountLastYear?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM1\'" [caption]="fieldControlData[\'PlanM1\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM2\'" [caption]="fieldControlData[\'PlanM2\'].CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM3\'" [caption]="fieldControlData[\'PlanM3\']!.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM4\'" [caption]="fieldControlData[\'PlanM4\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM5\'" [caption]="fieldControlData[\'PlanM5\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM6\'" [caption]="fieldControlData[\'PlanM6\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM7\'" [caption]="fieldControlData[\'PlanM7\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM8\'" [caption]="fieldControlData[\'PlanM8\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM9\'" [caption]="fieldControlData[\'PlanM9\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM10\'" [caption]="fieldControlData[\'PlanM10\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM11\'" [caption]="fieldControlData[\'PlanM11\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'PlanM12\'" [caption]="fieldControlData[\'PlanM12\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'CommitAmount\'" [caption]="fieldControlData[\'CommitAmount\']?.CaptionDescription" [visible]="fieldControlData[\'CommitAmount\']?.visible" [headerCellTemplate]="\'defaultHeaderTemplate\'"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM1\'" [caption]="fieldControlData[\'ComM1\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM2\'" [caption]="fieldControlData[\'ComM2\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM3\'" [caption]="fieldControlData[\'ComM3\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM4\'" [caption]="fieldControlData[\'ComM4\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM5\'" [caption]="fieldControlData!.ComM5?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM6\'" [caption]="fieldControlData[\'ComM6\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM7\'" [caption]="fieldControlData[\'ComM7\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM8\'" [caption]="fieldControlData[\'ComM8\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM9\'" [caption]="fieldControlData[\'ComM9\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM10\'" [caption]="fieldControlData[\'ComM10\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM11\'" [caption]="fieldControlData[\'ComM11\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'ComM12\'" [caption]="fieldControlData.ComM12\']?.CaptionDescription" [headerCellTemplate]="\'defaultHeaderTemplate\'" [visible]="false"> <dxo-format type="fixedPoint" [precision]="2"> </dxo-format> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'Remark\'" [caption]="fieldControlData?.\'Remark\']?.CaptionDescription" [visible]="fieldControlData[\'Remark\']?.visible" [width]="120" [headerCellTemplate]="\'defaultHeaderTemplate\'"></dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'Message\'" [minWidth]="110" [headerCellTemplate]="\'defaultHeaderTemplate\'" [caption]="fieldControlData[\'Message\']?.CaptionDescription" [visible]="fieldControlData[\'Message\']?.visible"></dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'SubmitSAPDate\'" [caption]="fieldControlData[\'SubmitSAPDate\']?.CaptionDescription" [visible]="fieldControlData[\'SubmitSAPDate\']?.visible" [showWhenGrouped]="true" [dataType]="\'date\'" [format]="\'yyyy-MM-dd\'" [alignment]="\'center\'" [headerCellTemplate]="\'defaultHeaderTemplate\'"> </dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'Comment\'" [caption]="fieldControlData[\'CommentReject\']?.CaptionDescription" [visible]="fieldControlData[\'CommentReject\']?.visible" [width]="200" [headerCellTemplate]="\'defaultHeaderTemplate\'"></dxi-column> <dxi-column [filterType]="\'include\'" [dataField]="\'StateInfo\'" [caption]="fieldControlData[\'StateInfo\']?.CaptionDescription" [visible]="fieldControlData[\'StateInfo\']?.visible" [alignment]="\'center\'" [width]="100" [cellTemplate]="\'stateCellTemplate\'" [fixedPosition]="\'right\'" [fixed]="true" [headerCellTemplate]="\'defaultHeaderTemplate\'"> <div *dxTemplate="let item of \'stateCellTemplate\'"> <span>{{ item.data.StateInfo | emptyValue }}</span> </div> </dxi-column> <!-- <dxi-column [filterType]="\'include\'" [dataField]="\'StatusName\'" [caption]="fieldControlData[\'StatusName\']?.CaptionDescription" [visible]="fieldControlData[\'StatusName\']?.visible" [alignment]="\'center\'" [width]="110" [cellTemplate]="\'statusCellTemplate\'" [fixed]="true" [fixedPosition]="\'right\'" [headerCellTemplate]="\'defaultHeaderTemplate\'" > <div *dxTemplate="let item of \'statusCellTemplate\'"> <span class="badge-status badge wd-90" [ngClass]="item.data.StatusName | statusClass">{{ item.data.StatusName }}</span> </div> </dxi-column> --> <!-- [visible]="permissionActions[PermissionAction.Edit]" --> <dxi-column [filterType]="\'include\'" [alignment]="\'center\'" [width]="100" [cellTemplate]="\'actionCellTemplate\'" [allowGrouping]="false" [allowHeaderFiltering]="false" [allowFiltering]="false" [allowHiding]="false" [allowSorting]="false" [allowSearch]="false" [showInColumnChooser]="false" [fixed]="true" [fixedPosition]="\'right\'"> <div *dxTemplate="let item of \'actionCellTemplate\'"> <div class="mx-1"> <button *ngIf="item.data.CanEdit && permissionActions[PermissionAction.Edit]" class="btn btn-action btn-dark p-1 mr-2 no-box-shadow bs-tooltip" title="Edit Plan" (click)="editPlanClick($event, item.data)"> <i class="fa-solid fa-edit fa-lg"></i> </button> <button *ngIf="item.data.CanEdit && permissionActions[PermissionAction.Delete]" class="btn btn-danger btn-action p-1 mr-2 no-box-shadow bs-tooltip" title="Delete Plan" (click)="deletePlanItemClick(item.data)"> <i class="fa-solid fa-trash-can fa-lg"></i> </button> </div> </div> </dxi-column>'; my $regex = qr/(?:fieldControlData\[?\'?\!?\.?)(\w*)(?:\'\])\!?\??\.?/mp; my $subst = 'fieldControlerData?.$1?.'; my $result = $str =~ s/$regex/$subst/r; print "The result of the substitution is' $result\n";

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