import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?: # 采用非捕获括号进行分组(非必要不使用捕获型括号)\n"
+ " ```[\\s\\S]*?``` # 采用非贪婪匹配(必须),匹配0到n次空白或非空白字符(任意字符)\n"
+ ") # 结束第一个分支\n"
+ "| # 或符号\n"
+ "(?: # 同上,采用非捕获型括号\n"
+ " ~~~[\\s\\S]*?~~~ # 同上,非贪婪匹配来匹配0到n次空白或非空白字符\n"
+ ") # 结束第二个分支";
final String string = "// 1. 匹配四个空格导出的代码块\n\n"
+ " functino(asfd)\n"
+ " safdsadf\n"
+ " safsadf\n"
+ " safdsdaf\n\n\n\n"
+ "// 2. 匹配三个反引号所引出的代码块\n"
+ "```\n"
+ " func function(){\n"
+ " }\n"
+ "```\n\n"
+ "这里是一些文本\n"
+ "……\n"
+ "………………\n\n"
+ "``` python\n"
+ " print(\"hello\")\n"
+ "```\n\n"
+ "// 3.如果四个空格之前的一行不是回车独占一行,则不会导出代码块(符合Markdown约定)\n"
+ " functino(asfd)\n"
+ " safdsadf\n"
+ " safsadf\n"
+ " safdsdaf\n"
+ "safd\n\n"
+ "// 4. 匹配三个波浪号导出的代码块\n\n"
+ "~~~\n"
+ " fmt.println(123)\n"
+ "~~~\n\n"
+ "// 5. 匹配前后四个及以上反引号导出的代码块\n"
+ "````\n"
+ "aaa\n"
+ "```\n"
+ "````\n\n"
+ "这里是一些文本……\n\n"
+ "`````\n"
+ " print(\"this is a code block\")\n"
+ "`````\n\n"
+ "// 6. 匹配前后四个及以上波浪号导出的代码块\n"
+ "~~~~\n"
+ "aaa\n"
+ "~~~\n"
+ "~~~~\n\n"
+ "这里是一些文本……\n\n"
+ "~~~~~~\n"
+ " print(\"this is a code block\")\n"
+ "~~~~~~\n";
final String subst = "";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.COMMENTS);
final Matcher matcher = pattern.matcher(string);
// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(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