import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "‘(?!(?:“[^”\\n]*”|[^‘”\\n])*’(?![a-z]))";
final String string = "“double-quote,” and some text\n"
+ "Some text and “double-quote” and an ‘orphan\n"
+ "“double-quote,” some text and ‘matched l/rsquo’\n"
+ "Some text and “double-quote” and an ‘orphan and an ’elided word\n"
+ "“double-quote,” ‘matched l/rsquo’ and an ‘orphan and ’elided word\n"
+ "Some text, “double-quote,” more text, an ‘orphan and a contract’n\n"
+ "“double-quote,” some text, and another “double quote.”\n"
+ "“double-quote,” some text, an ‘orphan and “another double-quote”\n"
+ "“double-quote,” a ‘matched l/rsquo with an “embedded double-quote” in it.’\n"
+ "“double-quote,” a ‘matched l/rsquo with an “embedded double-quote” in it’ and an ‘orphan.\n"
+ "“double-quote,” some text, an ‘orphan, a contract’n, and “another double-quote”\n"
+ "“double-quote,” some text, another “double-quote,” an ‘orphan and a contract’n\n"
+ "“double-quote” and “another double-quote” and an ‘orphan and ‘another lsquo\n"
+ "“double-quote” and some text and an ‘orphan and ‘a matched l/rsquo’\n"
+ "Some text and “double-quote” and an ‘orphan and ‘a matched l/rsquo with a contract’n’\n"
+ "some text and an ‘orphan\n"
+ "some text and an ‘orphan and an ’elided word\n"
+ "some text and an ‘orphan and a contract’n\n"
+ "some text ‘orphan, another ‘lsquo, and more text\n"
+ "some text ‘orphan, a contract’n, another ‘lsquo and ’elided word and more text\n"
+ "some text, an ‘orphan and a “double-quote with ‘matching l/rsquo’” and more text\n\n"
+ "Some text, “double quote, with an ‘orphan inside.”\n"
+ "Some text, “double quote, with a ‘matched l/rsquo inside.’”\n"
+ "Some text, “double quote, with an ‘orphan and contract’n inside.”\n"
+ "Some text, “double quote, with an ‘orphan and ’elided word inside.”\n"
+ "Some text, “double quote, with an ‘orphan and ‘matched l/rsquo inside.’”\n"
+ "“‘Orphan immediately following double-quote.”\n"
+ "“‘Matching l/rsquo immediately inside double-quote.’”\n"
+ "“‘Orphan immediately following double-quote with ‘matched l/rsquo’ inside.”\n"
+ "“Double quote,” another “double quote with an ‘orphan and ‘matched l/rsquo’”\n"
+ "“double quote,” another “double quote with an ‘orphan and contract’n and ‘matched l/rsquo’ and more text”";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
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