import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(([(|\\[](?P<series>[^)\\]]*)[)|\\]]))?((?P<author>.*[^\\s][^\\-])[\\s]+-[\\s]*)?(?P<title>[^(]*)([(|\\[](?:[\\s]*(?P<published>(([12][\\d]{3,3})(?:(?!([^.\\)\\-a-zA-Z_]*(-+[^.\\)a-zA-Z_]+)+)))))?)?[\\s]*([,]?[\\s]*(?P<publisher>[\\s\\w\\s]*)[\\s]*)?([,]?[\\s]*(isbn:|isbn[-]?13:)?(?P<isbn>[0-9-]+))?[)|\\]])?";
final String string = "(1958, Open Road d34234234, 978-1-4532-1730-6).epub\n"
+ "(1958, Open Ro234ad , 9781-4532-o1730-6).epub\n"
+ "(1958, Open Rosd234ad ).epub\n"
+ "( 1958 ).epub\n"
+ "(1958).epub\n"
+ "( Open Road ).epub\n"
+ "(Open road , 9234-1-4532-17300-9-6).epub\n"
+ "(1234, 9234-1-4532-17300-9-6).epub\n"
+ "(91886).epub\n"
+ "(9186).epub\n"
+ "(1186).epub\n\n"
+ "title (1958, Open Road34234234, 978-1-4532-1730-6).epub\n"
+ "(asdf) author, a2 - title ioiuoi-uyoiu (1958, Open Ro234ad , 9781-4532-1730-6).epub\n"
+ "author, adf - title ioiuoi-uyoiu (1958, Open Rosd234ad ).epub\n"
+ "author, adf - title ioiuoi-uyoiu ( 1958 ).epub\n"
+ "author, adf - title ioiuoi-uyoiu (1958).epub\n"
+ "author, adf - title ioiuoi-uyoiu ( Open Road ).epub\n"
+ "(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu (Open road , 9234-1-4532-17300-9-6).epub\n"
+ "author, adf - title ioiuoi-uyoiu (1234, 9234-1-4532-17300-9-6).epub\n"
+ "author, adf - title ioiuoi-uyoiu (1234, 923416).epub\n"
+ "author, adf - title ioiuoi-uyoiu ( 91886-8).epub\n"
+ "author, adf - title ioiuoi-uyoiu ( 9186 ).epub\n"
+ "author, adf - title ioiuoi-uyoiu ( 1186 ).epub\n"
+ "(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , isbn:9234-1-4532-17300-9-6).epub\n"
+ "(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , isbn13:9234-1-4532-17300-9-6).epub\n"
+ "(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , isbn-13:9234-1-4532-17300-9-6).epub\n"
+ "(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , 9234-1-4532-17300-9-6).epub";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
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