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