import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "<p>(\\s*)(<a(.*)>)?(\\s*)(https?:\\/\\/)?(w{3}\\.)?(youtube\\.com|youtu\\.be)\\/(watch\\?v=|embed\\/)?([A-Za-z0-9-_]{11})(\\S*)(\\s*)(<\\/a>)?(\\s*)<\\/p>";
final String string = "No protocol:\n\n"
+ "<p>youtube.com/watch?v=dQw4w9WgXcQ</p>\n"
+ "<p>www.youtube.com/watch?v=dQw4w9WgXcQ</p>\n\n"
+ "HTTP or HTTPS:\n\n"
+ "<p>http://youtube.com/watch?v=dQw4w9WgXcQ</p>\n"
+ "<p>http://www.youtube.com/watch?v=dQw4w9WgXcQ</p>\n"
+ "<p>https://youtube.com/watch?v=dQw4w9WgXcQ</p>\n"
+ "<p>https://www.youtube.com/watch?v=dQw4w9WgXcQ</p>\n\n"
+ "With or without “www”\n\n"
+ "<p>https://youtube.com/watch?v=dQw4w9WgXcQ</p>\n"
+ "<p>https://www.youtube.com/watch?v=dQw4w9WgXcQ</p>\n\n"
+ "Youtu.be short links\n"
+ "<p>youtu.be/LQaehcfXvK0</p>\n"
+ "<p>https://youtu.be/LQaehcfXvK0</p>\n\n"
+ "Embed Urls:\n"
+ "<p>http://www.youtube.com/embed/dQw4w9WgXcQ</p>\n\n"
+ "URLs with extra parameters:\n"
+ "<p>https://www.youtube.com/watch?v=LQaehcfXvK0&feature=youtu.be</p>\n"
+ "<p>https://www.youtube.com/watch?v=dQw4w9WgXcQ&list=RDdQw4w9WgXcQ&start_radio=1&t=1</p>\n\n"
+ "This URL won’t actually work on YouTube, but it works here, which is somewhat odd? And yet doesn't seem harmful.\n"
+ "<p>youtu.be/embed/dQw4w9WgXcQ</p>\n\n"
+ "Paragraph tags on separate lines with arbitrary whitespace:\n\n"
+ "<p>\n"
+ " www.youtube.com/embed/u8pCsfT1gDU\n"
+ "</p>\n\n"
+ "<p>\n"
+ " https://youtube.com/watch?v=dQw4w9WgXcQ\n"
+ "</p>\n"
+ "<p>\n"
+ " http://www.youtube.com/embed/dQw4w9WgXcQ\n"
+ "</p>\n\n"
+ " <p>\n"
+ " youtube.com/watch?v=dQw4w9WgXcQ\n\n"
+ "</p>\n\n"
+ "Paragraph tags with any other text in them, besides the URL:\n\n"
+ "<p>This shouldn’t work: https://youtube.com/watch?v=dQw4w9WgXcQ</p>\n"
+ "<p>https://youtube.com/watch?v=dQw4w9WgXcQ nor this</p>\n"
+ "<p>\n"
+ "https://youtube.com/watch?v=dQw4w9WgXcQ also not this\n\n"
+ "</p>\n\n\n"
+ "Paragraph tags with links added by markdown-it:\n\n"
+ "<p><a href=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\">https://www.youtube.com/watch?v=dQw4w9WgXcQ</a></p>\n\n"
+ "<p>\n"
+ " <a href=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ?something\" class=\"something\" id=\"whatever\">\n"
+ " youtube.com/watch?v=dQw4w9WgXcQ?foo=bar&whatever\n\n"
+ " </a>\n"
+ "</p>\n";
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