Regular Expressions 101

Save & Manage Regex

  • Current Version: 1
  • Save & Share
  • Community Library

Flavor

  • PCRE2 (PHP)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java
  • .NET 7.0 (C#)
  • Rust
  • PCRE (Legacy)
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests
Sponsors
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]
  • Character class intersection
    [\w&&[^\d]]
  • 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
Processing...

Test String

Substitution
Processing...

Code Generator

Generated Code

re = /^\s*#\s*cancel\s*duplicate.*\n/mi str = '--- # Mega-Linter GitHub Action configuration file # More info at https://megalinter.github.io name: Mega-Linter on: # Trigger mega-linter at every push. Action will also be visible from Pull Requests to main push: # Comment this line to trigger action only on pull-requests (not recommended if you don\'t pay for GH Actions) pull_request: branches: [master, main] env: # Comment env block if you do not want to apply fixes # Apply linter fixes configuration APPLY_FIXES: all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool) APPLY_FIXES_EVENT: pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all) APPLY_FIXES_MODE: commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request) concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true jobs: # Cancel duplicate jobs: https://github.com/fkirc/skip-duplicate-actions#option-3-cancellation-only build: name: Mega-Linter runs-on: ubuntu-latest steps: # Git Checkout - name: Checkout Code uses: actions/checkout@v2 with: token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} fetch-depth: 0 # Mega-Linter - name: Mega-Linter id: ml # You can override Mega-Linter flavor used to have faster performances # More info at https://megalinter.github.io/flavors/ uses: megalinter/megalinter@v5 env: # All available variables are described in documentation # https://megalinter.github.io/configuration/ VALIDATE_ALL_CODEBASE: ${{ github.event_name == \'push\' && github.ref == \'refs/heads/main\' }} # Validates all source when push on main, else just the git diff with main. Override with true if you always want to lint all sources GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # ADD YOUR CUSTOM ENV VARIABLES HERE OR DEFINE THEM IN A FILE .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY # DISABLE: COPYPASTE,SPELL # Uncomment to disable copy-paste and spell checks # Upload Mega-Linter artifacts - name: Archive production artifacts if: ${{ success() }} || ${{ failure() }} uses: actions/upload-artifact@v2 with: name: Mega-Linter reports path: | report mega-linter.log # Create pull request if applicable (for now works only on PR from same repository, not from forks) - name: Create Pull Request with applied fixes id: cpr if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == \'all\' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == \'pull_request\' && (github.event_name == \'push\' || github.event.pull_request.head.repo.full_name == github.repository) uses: peter-evans/create-pull-request@v3 with: token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} commit-message: "[Mega-Linter] Apply linters automatic fixes" title: "[Mega-Linter] Apply linters automatic fixes" labels: bot - name: Create PR output if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == \'all\' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == \'pull_request\' && (github.event_name == \'push\' || github.event.pull_request.head.repo.full_name == github.repository) run: | echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" # Push new commit if applicable (for now works only on PR from same repository, not from forks) - name: Prepare commit if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == \'all\' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == \'commit\' && github.ref != \'refs/heads/main\' && (github.event_name == \'push\' || github.event.pull_request.head.repo.full_name == github.repository) run: sudo chown -Rc $UID .git/ - name: Commit and push applied linter fixes if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == \'all\' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == \'commit\' && github.ref != \'refs/heads/main\' && (github.event_name == \'push\' || github.event.pull_request.head.repo.full_name == github.repository) uses: stefanzweifel/git-auto-commit-action@v4 with: branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }} commit_message: "[Mega-Linter] Apply linters fixes" ' subst = '' result = str.gsub(re, subst) # Print the result of the substitution puts 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 Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html