import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "\\B(([\\/]{0,}#(?:(?![×Þß÷þø]))([-'_0-9a-zÀ-ÿ]){1,})+)";
final String string = "#hashtag\n"
+ "a #hashtag\n"
+ "a #hashtag world\n"
+ "cool.#hashtag\n"
+ "##hashtag, but only until the comma and starting at second hash\n"
+ "#hashtag1#hashtag2 two separate matches\n"
+ "https://stackoverflow.com/questions/ask#notHashTag\n"
+ "Word#notHashTag\n"
+ "#ab is not too short to be a hashtag\n\n"
+ "I #love #chocolate\n"
+ "Hi #future-me. How are you?\n"
+ "Hi #fíre gone #allée #allèàoùî\n"
+ "Hi there #a#b\n"
+ "#hello Hi\\nthere how#are you #doing now? #dog\n"
+ "Hi there #tag.\n"
+ "# Hi\\nHow are you?\n"
+ "https://notium.org/some-url#something\n"
+ "https://notium.org/some-url/#something \n"
+ "#some_word\n\n"
+ ".#toto\n\n"
+ "# Markdown Example\n"
+ "Markdown allows you to easily include formatted text, images, and even formatted Dart code in your app.\n\n"
+ "## Titles\n\n"
+ "Setext-style\n\n"
+ "This is an H1 ============= This is an H2 -------------\n\n"
+ "Atx-style\n\n"
+ "# This is an H1 ## This is an H2 ###### This is an H6\n\n"
+ "Select the valid headers:\n\n"
+ "- [x] # hello\n"
+ "- [ ] #hello\n\n"
+ "## Links\n\n"
+ "[Google's Homepage][Google]\n\n"
+ "[inline-style](https://www.google.com) [reference-style][Google]\n\n"
+ "## Images\n\n\n\n"
+ "## Tables\n\n"
+ "|Syntax |Result |\n"
+ "|---------------------------------------|-------------------------------------|\n"
+ "|*italic 1* |italic 1 |\n"
+ "|_italic 2_ | italic 2 |\n"
+ "|**bold 1** |bold 1 |\n"
+ "|__bold 2__ |bold 2 |\n"
+ "|This is a ~~strikethrough~~ |This is a strikethrough |\n"
+ "|***italic bold 1*** |italic bold 1 |\n"
+ "|___italic bold 2___ |italic bold 2 |\n"
+ "|***~~italic bold strikethrough 1~~***|***italic bold strikethrough 1***|\n"
+ "|~~***italic bold strikethrough 2***~~|italic bold strikethrough 2|\n\n"
+ "## Styling\n"
+ "Style text as italic, bold, strikethrough, or inline code.\n\n"
+ "- Use bulleted lists\n"
+ "- To better clarify\n"
+ "- Your points\n\n"
+ "## Code blocks\n"
+ "Formatted Dart code looks really pretty too:\n\n"
+ "void main() { runApp(MaterialApp( home: Scaffold( body: Markdown(data: markdownData), ), )); }\n\n"
+ "## Markdown widget\n\n"
+ "This is an example of how to create your own Markdown widget:\n\n"
+ " Markdown(data: 'Hello world!');\n\n"
+ "Enjoy!\n\n"
+ "[Google]: https://www.google.com/\n\n"
+ "# DateTimeOffset\n"
+ "#csharp\n\n"
+ "Provides a combined #structure\\tof `DateTime` with an `Offset` property defining a deviation from UTC. It doesn't associate a time zone with the offset.";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
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