import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "\\h*<xen:if is=\"\\{\\$debugMode\\}\">\n"
+ "\\h*<xen:if hascontent=\"true\">\n"
+ "\\h*<dl class=\"pairsInline debugInfo\".*?>\n"
+ "(\\h*)<xen:contentcheck>";
final String string = "<xen:edithint template=\"footer.css\" />\n\n"
+ "<xen:hook name=\"footer\">\n"
+ "<div class=\"footer\">\n"
+ " <div class=\"pageWidth\">\n"
+ " <div class=\"pageContent\">\n"
+ " <xen:if is=\"{$canChangeStyle} OR {$canChangeLanguage}\">\n"
+ " <dl class=\"choosers\">\n"
+ " <xen:if is=\"{$canChangeStyle}\">\n"
+ " <dt>{xen:phrase style}</dt>\n"
+ " <dd><a href=\"{xen:link 'misc/style', '', 'redirect={$requestPaths.requestUri}'}\" class=\"OverlayTrigger Tooltip\" title=\"{xen:phrase style_chooser}\" rel=\"nofollow\">{$visitorStyle.title}</a></dd>\n"
+ " </xen:if>\n"
+ " <xen:if is=\"{$canChangeLanguage}\">\n"
+ " <dt>{xen:phrase language}</dt>\n"
+ " <dd><a href=\"{xen:link 'misc/language', '', 'redirect={$requestPaths.requestUri}'}\" class=\"OverlayTrigger Tooltip\" title=\"{xen:phrase language_chooser}\" rel=\"nofollow\">{$visitorLanguage.title}</a></dd>\n"
+ " </xen:if>\n"
+ " </dl>\n"
+ " </xen:if>\n"
+ " \n"
+ " <ul class=\"footerLinks\">\n"
+ " <xen:hook name=\"footer_links\">\n"
+ " <xen:if is=\"{$xenOptions.contactUrl.type} === 'default'\">\n"
+ " <li><a href=\"{xen:link 'misc/contact'}\" class=\"OverlayTrigger\" data-overlayOptions=\"{"fixed":false}\">{xen:phrase contact_us}</a></li>\n"
+ " <xen:elseif is=\"{$xenOptions.contactUrl.type} === 'custom'\" />\n"
+ " <li><a href=\"{$xenOptions.contactUrl.custom}\" {xen:if {$xenOptions.contactUrl.overlay}, 'class=\"OverlayTrigger\" data-overlayOptions=\"{"fixed":false}\"'}>{xen:phrase contact_us}</a></li>\n"
+ " </xen:if>\n"
+ " <li><a href=\"{xen:link help}\">{xen:phrase help}</a></li>\n"
+ " <xen:if is=\"{$homeLink}\"><li><a href=\"{$homeLink}\" class=\"homeLink\">{xen:phrase home}</a></li></xen:if>\n"
+ " <li><a href=\"{$requestPaths.requestUri}#navigation\" class=\"topLink\">{xen:phrase go_to_top}</a></li>\n"
+ " <li><a href=\"{xen:link forums/-/index.rss}\" rel=\"alternate\" class=\"globalFeed\" target=\"_blank\"\n"
+ " title=\"{xen:phrase rss_feed_for_x, 'title={$xenOptions.boardTitle}'}\">{xen:phrase rss}</a></li>\n"
+ " </xen:hook>\n"
+ " </ul>\n"
+ " \n"
+ " <span class=\"helper\"></span>\n"
+ " </div>\n"
+ " </div>\n"
+ "</div>\n\n"
+ "<div class=\"footerLegal\">\n"
+ " <div class=\"pageWidth\">\n"
+ " <div class=\"pageContent\">\n"
+ " <ul id=\"legal\">\n"
+ " <xen:hook name=\"footer_links_legal\">\n"
+ " <xen:if is=\"{$tosUrl}\"><li><a href=\"{$tosUrl}\">{xen:phrase terms_and_rules}</a></li></xen:if>\n"
+ " <xen:if is=\"{$xenOptions.privacyPolicyUrl}\"><li><a href=\"{$xenOptions.privacyPolicyUrl}\">{xen:phrase privacy_policy}</a></li></xen:if>\n"
+ " </xen:hook>\n"
+ " </ul>\n"
+ " \n"
+ " <div id=\"copyright\">{xen:helper copyright} {xen:phrase extra_copyright}</div>\n"
+ " <xen:hook name=\"footer_after_copyright\" />\n"
+ " \n"
+ " <xen:if is=\"{$debugMode}\">\n"
+ " <xen:if hascontent=\"true\">\n"
+ " <dl class=\"pairsInline debugInfo\" title=\"{$controllerName}->{$controllerAction}{xen:if $viewName, ' ({$viewName})'}\">\n"
+ " <xen:contentcheck>\n"
+ " <xen:if is=\"{$page_time}\"><dt>{xen:phrase timing}:</dt> <dd><a href=\"{$debug_url}\" rel=\"nofollow\">{xen:phrase x_seconds, 'time={xen:number $page_time, 4}'}</a></dd></xen:if>\n"
+ " <xen:if is=\"{$memory_usage}\"><dt>{xen:phrase memory}:</dt> <dd>{xen:phrase x_mb, 'size={xen:number {xen:calc \"{$memory_usage} / 1024 / 1024\"}, 3}'}</dd></xen:if>\n"
+ " <xen:if is=\"{$db_queries}\"><dt>{xen:phrase db_queries}:</dt> <dd>{xen:number {$db_queries}}</dd></xen:if>\n"
+ " </xen:contentcheck>\n"
+ " </dl>\n"
+ " </xen:if>\n"
+ " </xen:if>\n"
+ " \n"
+ " <span class=\"helper\"></span>\n"
+ " </div>\n"
+ " </div> \n"
+ "</div>\n"
+ "</xen:hook>";
final String subst = "$0\\n$1 <!-- Adding XenForo version strings -->\\n$1 <dt>XenForo Version:<dt> <dd>{$xenOptions.currentVersion} ({$xenOptions.currentVersionId})</dd>\\n\\n";
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