import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?<!\\\\)(?:\\[{2}[^\\n|]+(?:\\|[^\\n]+)?]]|\\[[^\\n]+]\\([^\\n:]+\\))";
final String string = "[[Link name|title]]\n\n"
+ "[[Link name]]\n\n"
+ "[[do not\n"
+ "|match]]\n"
+ "[I am not a link]]\n"
+ "some (text) [[Link]] more [text]\n\n"
+ "\\[[This is not a link]]\\[[[this is|a link]] foo bar ]\n\n"
+ "[[Folder Name/Link|link]]\n\n"
+ "[[Folder/other folder/file|label]]\n\n"
+ "[[]]\n"
+ "[[A [link] with brackets]]\n\n"
+ "[[A [link] with brackets|on [both] sides]]\n\n"
+ "[[A [bracket] folder/A [link] with brackets|on [both] sides]]\n\n"
+ "Markdown: [Three laws of motion](Three%20laws%20of%20motion.md)\n\n"
+ "\\[Not a link](Three%20laws%20of%20motion.md)\n\n"
+ "[also\n"
+ "not](a link)\n\n"
+ "[This [is] a link](Three%20laws%20of%20motion.md)\n\n"
+ "[Yes, you can put (parens) and [brackets] in a filename](Yes,%20you%20can%20put%20(parens)%20and%20[brackets]%20in%20a%20filename)\n\n"
+ "[This is an external link](https://regex101.com)\n\n"
+ " [[#Preview a linked file]] is a link to a heading in the current document.\n\n"
+ " [[Obsidian#Links are first-class citizens]] is a link to a heading in another document.\n\n"
+ "[[Help and support#Questions and advice#Report bugs and request features]] is a link to a subheading in another document.\n\n"
+ "You can link to a block by adding #^ at the end of your link destination followed by a unique block identifier. For example, [[2023-01-01#^37066d]]";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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