diff --git a/src/de/schildbach/pte/SbbProvider.java b/src/de/schildbach/pte/SbbProvider.java index 4f3b652d..d8841c4d 100644 --- a/src/de/schildbach/pte/SbbProvider.java +++ b/src/de/schildbach/pte/SbbProvider.java @@ -205,8 +205,9 @@ public class SbbProvider implements NetworkProvider + "(?:(.*?)\n?"// - + "(.+?)", Pattern.DOTALL); + private static final Pattern P_CONNECTIONS_COARSE = Pattern.compile("(.*?)\n"// + + "(.*?)\n"// + + "(?:.*?\n)?", Pattern.DOTALL); private static final Pattern P_CONNECTIONS_FINE = Pattern.compile(".*?" // + "name=\"guiVCtrl_connection_detailsOut_select_([\\w-]+)\".*?" // id + ".., (\\d{2}\\.\\d{2}\\.\\d{2}).*?" // departureDate @@ -248,10 +249,17 @@ public class SbbProvider implements NetworkProvider final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null; final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null; final List connections = new ArrayList(); + String oldZebra = null; final Matcher mConCoarse = P_CONNECTIONS_COARSE.matcher(page); while (mConCoarse.find()) { + final String zebra = mConCoarse.group(1); + if (oldZebra != null && zebra.equals(oldZebra)) + throw new IllegalArgumentException("missed row? last:" + zebra); + else + oldZebra = zebra; + final String set = mConCoarse.group(2) + mConCoarse.group(3); final Matcher mConFine = P_CONNECTIONS_FINE.matcher(set); if (mConFine.matches())