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
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
Processing...

Test String

Substitution
Processing...

Code Generator

Generated Code

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String[] args) { final String regex = "(.*\\n)+DOCUMENTATION.*(\\\"\\\"\\\"|''')\\n-*\\n?((.*\\n)+?)(\\2)(?s:.*)\n"; final String string = "#!/usr/bin/python\n" + "# -*- coding: utf-8 -*-\n\n" + "# (c) 2014, Ramon de la Fuente <ramon@delafuente.nl>\n" + "#\n" + "# This file is part of Ansible\n" + "#\n" + "# Ansible is free software: you can redistribute it and/or modify\n" + "# it under the terms of the GNU General Public License as published by\n" + "# the Free Software Foundation, either version 3 of the License, or\n" + "# (at your option) any later version.\n" + "#\n" + "# Ansible is distributed in the hope that it will be useful,\n" + "# but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "# GNU General Public License for more details.\n" + "#\n" + "# You should have received a copy of the GNU General Public License\n" + "# along with Ansible. If not, see <http://www.gnu.org/licenses/>.\n\n" + "DOCUMENTATION = \"\"\"\n" + "module: slack\n" + "short_description: Send Slack notifications\n" + "description:\n" + " - The M(slack) module sends notifications to U(http://slack.com) via the Incoming WebHook integration\n" + "version_added: 1.6\n" + "author: Ramon de la Fuente <ramon@delafuente.nl>\n" + "options:\n" + " domain:\n" + " description:\n" + " - Slack (sub)domain for your environment without protocol.\n" + " (i.e. C(future500.slack.com))\n" + " required: true\n" + " token:\n" + " description:\n" + " - Slack integration token\n" + " required: true\n" + " msg:\n" + " description:\n" + " - Message to send.\n" + " required: true\n" + " channel:\n" + " description:\n" + " - Channel to send the message to. If absent, the message goes to the channel selected for the I(token).\n" + " required: false\n" + " username:\n" + " description:\n" + " - This is the sender of the message.\n" + " required: false\n" + " default: ansible\n" + " icon_url:\n" + " description:\n" + " - Url for the message sender's icon (default C(http://www.ansible.com/favicon.ico))\n" + " required: false\n" + " icon_emoji:\n" + " description:\n" + " - Emoji for the message sender. See Slack documentation for options.\n" + " (if I(icon_emoji) is set, I(icon_url) will not be used)\n" + " required: false\n" + " link_names:\n" + " description:\n" + " - Automatically create links for channels and usernames in I(msg).\n" + " required: false\n" + " default: 1\n" + " choices:\n" + " - 1\n" + " - 0\n" + " parse:\n" + " description:\n" + " - Setting for the message parser at Slack\n" + " required: false\n" + " choices:\n" + " - 'full'\n" + " - 'none'\n" + " validate_certs:\n" + " description:\n" + " - If C(no), SSL certificates will not be validated. This should only be used\n" + " on personally controlled sites using self-signed certificates.\n" + " required: false\n" + " default: 'yes'\n" + " choices:\n" + " - 'yes'\n" + " - 'no'\n" + "\"\"\"\n\n" + "EXAMPLES = \"\"\"\n" + "- name: Send notification message via Slack\n" + " local_action:\n" + " module: slack\n" + " domain: future500.slack.com\n" + " token: thetokengeneratedbyslack\n" + " msg: \"{{ inventory_hostname }} completed\"\n\n" + "- name: Send notification message via Slack all options\n" + " local_action:\n" + " module: slack\n" + " domain: future500.slack.com\n" + " token: thetokengeneratedbyslack\n" + " msg: \"{{ inventory_hostname }} completed\"\n" + " channel: \"#ansible\"\n" + " username: \"Ansible on {{ inventory_hostname }}\"\n" + " icon_url: \"http://www.example.com/some-image-file.png\"\n" + " link_names: 0\n" + " parse: 'none'\n\n" + "\"\"\"\n\n\n" + "SLACK_INCOMING_WEBHOOK = 'https://%s/services/hooks/incoming-webhook?token=%s'\n\n" + "def build_payload_for_slack(module, text, channel, username, icon_url, icon_emoji, link_names, parse):\n" + " payload = dict(text=text)\n\n" + " if channel is not None:\n" + " payload['channel'] = channel if (channel[0] == '#') else '#'+channel\n" + " if username is not None:\n" + " payload['username'] = username\n" + " if icon_emoji is not None:\n" + " payload['icon_emoji'] = icon_emoji\n" + " else:\n" + " payload['icon_url'] = icon_url\n" + " if link_names is not None:\n" + " payload['link_names'] = link_names\n" + " if parse is not None:\n" + " payload['parse'] = parse\n\n" + " payload=\"payload=\" + module.jsonify(payload)\n" + " return payload\n\n" + "def do_notify_slack(module, domain, token, payload):\n" + " slack_incoming_webhook = SLACK_INCOMING_WEBHOOK % (domain, token)\n\n" + " response, info = fetch_url(module, slack_incoming_webhook, data=payload)\n" + " if info['status'] != 200:\n" + " obscured_incoming_webhook = SLACK_INCOMING_WEBHOOK % (domain, '[obscured]')\n" + " module.fail_json(msg=\" failed to send %s to %s: %s\" % (payload, obscured_incoming_webhook, info['msg']))\n\n" + "def main():\n" + " module = AnsibleModule(\n" + " argument_spec = dict(\n" + " domain = dict(type='str', required=True),\n" + " token = dict(type='str', required=True),\n" + " msg = dict(type='str', required=True),\n" + " channel = dict(type='str', default=None),\n" + " username = dict(type='str', default='Ansible'),\n" + " icon_url = dict(type='str', default='http://www.ansible.com/favicon.ico'),\n" + " icon_emoji = dict(type='str', default=None),\n" + " link_names = dict(type='int', default=1, choices=[0,1]),\n" + " parse = dict(type='str', default=None, choices=['none', 'full']),\n\n" + " validate_certs = dict(default='yes', type='bool'),\n" + " )\n" + " )\n\n" + " domain = module.params['domain']\n" + " token = module.params['token']\n" + " text = module.params['msg']\n" + " channel = module.params['channel']\n" + " username = module.params['username']\n" + " icon_url = module.params['icon_url']\n" + " icon_emoji = module.params['icon_emoji']\n" + " link_names = module.params['link_names']\n" + " parse = module.params['parse']\n\n" + " payload = build_payload_for_slack(module, text, channel, username, icon_url, icon_emoji, link_names, parse)\n" + " do_notify_slack(module, domain, token, payload)\n\n" + " module.exit_json(msg=\"OK\")\n\n" + "# import module snippets\n" + "from ansible.module_utils.basic import *\n" + "from ansible.module_utils.urls import *\n" + "main()"; final String subst = "---\\n\\3"; final Pattern pattern = Pattern.compile(regex); final Matcher matcher = pattern.matcher(string); // The substituted value will be contained in the result variable final String result = matcher.replaceFirst(subst); System.out.println("Substitution result: " + 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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html