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

/
/
gm

Test String

Substitution

Processing...

Code Generator

Generated Code

$re = '/(export )?const (.* \= \()(.*)(\).*\()(?\'fileContent\'(\n.*)+)\3\.(?\'varName\'[^}]*)\}(?\'restOfPropLine\'.*$)(?\'restOfFileContent\'(\n.*)+>\n\);)/m'; $str = 'export const AffiliateAccountBIFields = (props) => ( <SimpleShowLayout {...props} variant="one"> <UrlField source="bi_url" options={{ target: \'_blank\' }} /> <ProtectedBIConfigField source="bi_settings" /> </SimpleShowLayout> ); export const AffiliateAccountGeneralFields = (props) => ( <SimpleShowLayout {...props}> <TextField source="name" /> <ReferenceField linkType="show" label="Platform Provider" addLabel source="platform_provider_id" reference="accounts/platform-providers" allowEmpty > <TextField addLabel source="name" /> </ReferenceField> <ReferenceField label="Company" addLabel source="company_id" reference="companies" linkType="show" > <TextField addLabel source="name" /> </ReferenceField> <AccountManagerField label="Account Manager" source="account_manager_id" addLabel /> <PortfolioField label="Portfolio" source="portfolio_id" addLabel /> <FunctionField label="Status" addLabel source="activity_status" render={(record) => { if (!record.activity_status) return null; const humanizedStatus = get( ACTIVITY_STATUS_OPTIONS, `${record.activity_status}.name` ); if (!humanizedStatus) { // eslint-disable-next-line no-console console.warn(`Cannot obtain humanized value for activity_status: ${record.activity_status}`); } return ( <TextField source="activity_status" record={{ ...record, activity_status: humanizedStatus || record.activity_status, }} /> ); }} /> <UrlField source="affiliate_system_link" options={{ target: \'_blank\' }} /> <CopyToClipboardField source="username"> <TextField source="username" /> </CopyToClipboardField> <ProtectedField source="password" /> <CopyToClipboardField source="email"> <TextField source="email" /> </CopyToClipboardField> <TextField source="security_question" /> <ProtectedField source="security_answer" /> <TextField source="type" /> <BooleanField source="tracking_enabled" /> <TextField source="tracking_variable_name" /> <TextField source="external_affiliate_id" /> <TextField source="revenue_posting_code" /> <BooleanField source="loss_carry_forward" /> <DateField source="updated_at" locales="en-GB" showTime /> <DateField source="created_at" locales="en-GB" showTime /> </SimpleShowLayout> ); export const AffiliateAccountTabs = (props) => { if (!props.record) { return null; } return ( <TabbedShowLayout> <AffiliateAccountGeneralFields {...props} label="General" /> <AffiliateAccountBrands {...props} label="Brands" /> <AffiliateAccountDeals {...props} label="Deals" /> {props.hasBIPermission && ( <AffiliateAccountBIFields {...props} label="BI Settings" /> )} </TabbedShowLayout> ); }; AffiliateAccountTabs.propTypes = { record: PropTypes.object, hasBIPermission: PropTypes.bool.isRequired, }; export const Show = (props) => ( <AutoLoginStatusDialog messages={messages}> <AORShow {...props} title={( <Title resource="Affiliate Account" type="show" buttons={[ <FavoriteButton record={{ _id: props.match.params.id }} resource={props.resource} style={{ height: \'25px\' }} />, ]} /> )} actions={( <ActionsPanel customButtons={[ <AutoLoginButton record={{ _id: props.match.params.id }} resource={props.resource} resourceConfig={autoLoginConfig} label="Auto Login" />, ]} /> )} > <AffiliateAccountTabs hasBIPermission={props.hasBIPermission} /> </AORShow> <NotesView isShow match={props.match} resource={props.resource} /> </AutoLoginStatusDialog> ); Show.propTypes = { match: PropTypes.shape({ params: PropTypes.shape({ id: PropTypes.string, }), }), resource: PropTypes.string, hasBIPermission: PropTypes.bool.isRequired, }; export default connect((state) => ({ hasBIPermission: checkPermission(state.auth.permissions, \'*\', \'bi_user\'), }))(Show); '; $subst = "$1const $2{ ${varName}, ...$3 }$4${fileContent}${varName}}${restOfPropLine}${restOfFileContent}"; $result = preg_replace($re, $subst, $str); echo "The result of the substitution is ".$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 PHP, please visit: http://php.net/manual/en/ref.pcre.php