| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 66365c7 commit 3f29b92
21 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -108,6 +108,25 @@ private boolean validateMatch(Match match, String text) { | |||
| 108 | 108 | isValidMatch = startsWithBasicDate(subText); | |
| 109 | 109 | } | |
| 110 | 110 | } | |
| 111 | + | ||
| 112 | + // Expressions with mixed separators are not considered valid dates e.g. "30/4.85" (unless one is a comma "30/4, 2016") | ||
| 113 | + MatchGroup dayGroup = match.getGroup("day"); | ||
| 114 | + MatchGroup monthGroup = match.getGroup("month"); | ||
| 115 | + if (!StringUtility.isNullOrEmpty(dayGroup.value) && !StringUtility.isNullOrEmpty(monthGroup.value)) { | ||
| 116 | + String noDateText = match.value.replace(yearGroup.value, "") | ||
| 117 | + .replace(monthGroup.value, "").replace(dayGroup.value, ""); | ||
| 118 | + String[] separators = {"/", "\\", "-", "."}; | ||
| 119 | + int separatorCount = 0; | ||
| 120 | + for (String separator : separators) { | ||
| 121 | + if (noDateText.contains(separator)) { | ||
| 122 | + separatorCount++; | ||
| 123 | + } | ||
| 124 | + if (separatorCount > 1) { | ||
| 125 | + isValidMatch = false; | ||
| 126 | + break; | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | + } | ||
| 111 | 130 | } | |
| 112 | 131 | ||
| 113 | 132 | return isValidMatch; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -128,11 +128,27 @@ public List<Token> timeOfTodayAfter(String input, LocalDateTime reference) { | |||
| 128 | 128 | ||
| 129 | 129 | Match[] matches = RegExpUtility.getMatches(this.config.getSimpleTimeOfTodayAfterRegex(), input); | |
| 130 | 130 | for (Match match : matches) { | |
| 131 | + // @TODO Remove when lookbehinds are handled correctly | ||
| 132 | + if (isDecimal(match, input)) { | ||
| 133 | + continue; | ||
| 134 | + } | ||
| 135 | + | ||
| 131 | 136 | ret.add(new Token(match.index, match.index + match.length)); | |
| 132 | 137 | } | |
| 133 | 138 | ||
| 134 | 139 | return ret; | |
| 135 | 140 | } | |
| 141 | + | ||
| 142 | + // Check if the match is part of a decimal number (e.g. 123.24) | ||
| 143 | + private boolean isDecimal(Match match, String text) { | ||
| 144 | + boolean isDecimal = false; | ||
| 145 | + if (match.index > 1 && (text.charAt(match.index - 1) == ',' || | ||
| 146 | + text.charAt(match.index - 1) == '.') && Character.isDigit(text.charAt(match.index - 2)) && Character.isDigit(match.value.charAt(0))) { | ||
| 147 | + isDecimal = true; | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + return isDecimal; | ||
| 151 | + } | ||
| 136 | 152 | ||
| 137 | 153 | public List<Token> timeOfTodayBefore(String input, LocalDateTime reference) { | |
| 138 | 154 | List<Token> ret = new ArrayList<>(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -88,6 +88,11 @@ public final List<Token> basicRegexMatch(String text) { | |||
| 88 | 88 | ||
| 89 | 89 | Match[] matches = RegExpUtility.getMatches(regex, text); | |
| 90 | 90 | for (Match match : matches) { | |
| 91 | + | ||
| 92 | + // @TODO Remove when lookbehinds are handled correctly | ||
| 93 | + if (isDecimal(match, text)) { | ||
| 94 | + continue; | ||
| 95 | + } | ||
| 91 | 96 | ||
| 92 | 97 | // @TODO Workaround to avoid incorrect partial-only matches. Remove after time regex reviews across languages. | |
| 93 | 98 | String lth = match.getGroup("lth").value; | |
@@ -102,6 +107,17 @@ public final List<Token> basicRegexMatch(String text) { | |||
| 102 | 107 | ||
| 103 | 108 | return ret; | |
| 104 | 109 | } | |
| 110 | + | ||
| 111 | + // Check if the match is part of a decimal number (e.g. 123.24) | ||
| 112 | + private boolean isDecimal(Match match, String text) { | ||
| 113 | + boolean isDecimal = false; | ||
| 114 | + if (match.index > 1 && (text.charAt(match.index - 1) == ',' || | ||
| 115 | + text.charAt(match.index - 1) == '.') && Character.isDigit(text.charAt(match.index - 2)) && Character.isDigit(match.value.charAt(0))) { | ||
| 116 | + isDecimal = true; | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + return isDecimal; | ||
| 120 | + } | ||
| 105 | 121 | ||
| 106 | 122 | private List<Token> atRegexMatch(String text) { | |
| 107 | 123 | List<Token> ret = new ArrayList<>(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -17,7 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | 18 | public class BaseDateTime { | |
| 19 | 19 | ||
| 20 | - public static final String HourRegex = "(?<hour>2[0-4]|[0-1]?\\d)(h)?"; | ||
| 20 | + public static final String HourRegex = "(?<!\\d[,.])(?<hour>2[0-4]|[0-1]?\\d)(h)?"; | ||
| 21 | 21 | ||
| 22 | 22 | public static final String TwoDigitHourRegex = "(?<hour>[0-1]\\d|2[0-4])(h)?"; | |
| 23 | 23 | ||
@@ -36,6 +36,8 @@ public class BaseDateTime { | |||
| 36 | 36 | public static final String IllegalYearRegex = "([-])({FourDigitYearRegex})([-])" | |
| 37 | 37 | .replace("{FourDigitYearRegex}", FourDigitYearRegex); | |
| 38 | 38 | ||
| 39 | + public static final String CheckDecimalRegex = "(?![,.]\\d)"; | ||
| 40 | + | ||
| 39 | 41 | public static final String RangeConnectorSymbolRegex = "(--|-|—|——|~|–)"; | |
| 40 | 42 | ||
| 41 | 43 | public static final String BaseAmDescRegex = "(am\\b|a\\s*\\.\\s*m\\s*\\.|a[\\.]?\\s*m\\b)"; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -88,7 +88,7 @@ public class EnglishTimeZone { | |||
| 88 | 88 | .put("esat", -180) | |
| 89 | 89 | .put("est", -300) | |
| 90 | 90 | .put("estm", -300) | |
| 91 | - .put("et", -240) | ||
| 91 | + .put("et", -300) | ||
| 92 | 92 | .put("fjst", 780) | |
| 93 | 93 | .put("fjt", 720) | |
| 94 | 94 | .put("get", 240) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -27,9 +27,9 @@ public class FrenchDateTime { | |||
| 27 | 27 | ||
| 28 | 28 | public static final String RangeConnectorRegex = "(?<and>de la|au|[aà]|et(\\s*la)?|--|-|—|——)"; | |
| 29 | 29 | ||
| 30 | - public static final String RelativeRegex = "(?<order>prochaine?|de|du|ce(tte)?|l[ae]|derni[eè]re|pr[eé]c[eé]dente|au\\s+cours+(de|du\\s*))"; | ||
| 30 | + public static final String RelativeRegex = "(?<order>prochaine?|de|du|ce(tte)?|l[ae]|derni[eè]re|hier|pr[eé]c[eé]dente|au\\s+cours+(de|du\\s*))"; | ||
| 31 | 31 | ||
| 32 | - public static final String StrictRelativeRegex = "(?<order>prochaine?|derni[eè]re|pr[eé]c[eé]dente|au\\s+cours+(de|du\\s*))"; | ||
| 32 | + public static final String StrictRelativeRegex = "(?<order>prochaine?|derni[eè]re|hier|pr[eé]c[eé]dente|au\\s+cours+(de|du\\s*))"; | ||
| 33 | 33 | ||
| 34 | 34 | public static final String NextSuffixRegex = "(?<order>prochaines?|prochain|suivante)\\b"; | |
| 35 | 35 | ||
@@ -39,9 +39,9 @@ public class FrenchDateTime { | |||
| 39 | 39 | ||
| 40 | 40 | public static final String RangePrefixRegex = "(du|depuis|des?|entre)"; | |
| 41 | 41 | ||
| 42 | - public static final String DayRegex = "(?<day>01|02|03|04|05|06|07|08|09|10|11e?|12e?|13e?|14e?|15e?|16e?|17e?|18e?|19e?|1er|1|21e?|20e?|22e?|23e?|24e?|25e?|26e?|27e?|28e?|29e?|2e?|30e?|31e?|3e?|4e?|5e?|6e?|7e?|8e?|9e?)(?=\\b|t)"; | ||
| 42 | + public static final String DayRegex = "(?<day>(?:3[0-1]|[1-2]\\d|0?[1-9])(e(r)?)?)(?=\\b|t)"; | ||
| 43 | 43 | ||
| 44 | - public static final String MonthNumRegex = "(?<month>01|02|03|04|05|06|07|08|09|10|11|12|1|2|3|4|5|6|7|8|9)\\b"; | ||
| 44 | + public static final String MonthNumRegex = "(?<month>1[0-2]|(0)?[1-9])\\b"; | ||
| 45 | 45 | ||
| 46 | 46 | public static final String SpecialDescRegex = "(p\\b)"; | |
| 47 | 47 | ||
@@ -60,7 +60,7 @@ public class FrenchDateTime { | |||
| 60 | 60 | .replace("{AmPmDescRegex}", AmPmDescRegex) | |
| 61 | 61 | .replace("{SpecialDescRegex}", SpecialDescRegex); | |
| 62 | 62 | ||
| 63 | - public static final String TwoDigitYearRegex = "\\b(?<![$])(?<year>([0-24-9]\\d))(?!(\\s*((\\:\\d)|{AmDescRegex}|{PmDescRegex}|\\.\\d)))\\b" | ||
| 63 | + public static final String TwoDigitYearRegex = "\\b(?<![$])(?<year>([0-9]\\d))(?!(\\s*((\\:\\d)|{AmDescRegex}|{PmDescRegex}|\\.\\d)))\\b" | ||
| 64 | 64 | .replace("{AmDescRegex}", AmDescRegex) | |
| 65 | 65 | .replace("{PmDescRegex}", PmDescRegex); | |
| 66 | 66 | ||
@@ -212,23 +212,25 @@ public class FrenchDateTime { | |||
| 212 | 212 | .replace("{YearRegex}", YearRegex) | |
| 213 | 213 | .replace("{TwoDigitYearRegex}", TwoDigitYearRegex); | |
| 214 | 214 | ||
| 215 | - public static final String DateExtractor1 = "\\b({WeekDayRegex}(\\s+|\\s*,\\s*))?{MonthRegex}\\s*[/\\\\\\.\\-]?\\s*{DayRegex}\\b" | ||
| 215 | + public static final String DateExtractor1 = "\\b({WeekDayRegex}(\\s+|\\s*,\\s*))?{MonthRegex}\\s*[/\\\\\\.\\-]?\\s*{DayRegex}(\\s*[/\\\\\\.\\-]?\\s*{BaseDateTime.FourDigitYearRegex})?\\b" | ||
| 216 | 216 | .replace("{WeekDayRegex}", WeekDayRegex) | |
| 217 | 217 | .replace("{MonthRegex}", MonthRegex) | |
| 218 | - .replace("{DayRegex}", DayRegex); | ||
| 218 | + .replace("{DayRegex}", DayRegex) | ||
| 219 | + .replace("{BaseDateTime.FourDigitYearRegex}", BaseDateTime.FourDigitYearRegex); | ||
| 219 | 220 | ||
| 220 | 221 | public static final String DateExtractor2 = "\\b({WeekDayRegex}(\\s+|\\s*,\\s*))?{DayRegex}(\\s+|\\s*,\\s*|\\s+){MonthRegex}\\s*[\\.\\-]?\\s*{DateYearRegex}\\b" | |
| 221 | 222 | .replace("{WeekDayRegex}", WeekDayRegex) | |
| 222 | 223 | .replace("{MonthRegex}", MonthRegex) | |
| 223 | 224 | .replace("{DayRegex}", DayRegex) | |
| 224 | 225 | .replace("{DateYearRegex}", DateYearRegex); | |
| 225 | 226 | ||
| 226 | - public static final String DateExtractor3 = "\\b({WeekDayRegex}(\\s+|\\s*,\\s*))?(?<!\\d\\s)(?<!\\d){DayRegex}(\\s+|\\s*,\\s*|\\s*-\\s*)({MonthRegex}((\\s+|\\s*,\\s*){DateYearRegex}(?!\\s*\\d))?|{MonthNumRegex}(\\s+|\\s*,\\s*){DateYearRegex}(?!\\s*\\d))\\b" | ||
| 227 | + public static final String DateExtractor3 = "\\b({WeekDayRegex}(\\s+|\\s*,\\s*))?((?<!\\d\\s)(?<!\\d){DayRegex}(\\s+|\\s*[.,/-])({MonthRegex}((\\s+|\\s*[.,/-]\\s*){DateYearRegex}(?!\\s*\\d))?|{MonthNumRegex}(\\s+|\\s*[.,/-]\\s*){DateYearRegex}(?!\\s*\\d))|{BaseDateTime.FourDigitYearRegex}\\s*[.,/-]?\\s*{DayRegex}\\s*[.,/-]?\\s*{MonthRegex})\\b" | ||
| 227 | 228 | .replace("{WeekDayRegex}", WeekDayRegex) | |
| 228 | 229 | .replace("{DayRegex}", DayRegex) | |
| 229 | 230 | .replace("{MonthRegex}", MonthRegex) | |
| 230 | 231 | .replace("{MonthNumRegex}", MonthNumRegex) | |
| 231 | - .replace("{DateYearRegex}", DateYearRegex); | ||
| 232 | + .replace("{DateYearRegex}", DateYearRegex) | ||
| 233 | + .replace("{BaseDateTime.FourDigitYearRegex}", BaseDateTime.FourDigitYearRegex); | ||
| 232 | 234 | ||
| 233 | 235 | public static final String DateExtractor4 = "\\b{MonthNumRegex}\\s*[/\\\\\\-]\\s*{DayRegex}\\s*[/\\\\\\-]\\s*{DateYearRegex}(?!\\s*[/\\\\\\-\\.]\\s*\\d+)" | |
| 234 | 236 | .replace("{MonthNumRegex}", MonthNumRegex) | |
@@ -241,28 +243,34 @@ public class FrenchDateTime { | |||
| 241 | 243 | .replace("{MonthNumRegex}", MonthNumRegex) | |
| 242 | 244 | .replace("{DateYearRegex}", DateYearRegex); | |
| 243 | 245 | ||
| 244 | - public static final String DateExtractor6 = "(?<=\\b(le|sur(\\sl[ae])?)\\s+){MonthNumRegex}[\\-\\.\\/]{DayRegex}\\b" | ||
| 246 | + public static final String DateExtractor6 = "(?<=\\b(le|sur(\\sl[ae])?)\\s+){MonthNumRegex}[\\-\\.\\/]{DayRegex}{BaseDateTime.CheckDecimalRegex}\\b" | ||
| 245 | 247 | .replace("{MonthNumRegex}", MonthNumRegex) | |
| 246 | - .replace("{DayRegex}", DayRegex); | ||
| 248 | + .replace("{DayRegex}", DayRegex) | ||
| 249 | + .replace("{BaseDateTime.CheckDecimalRegex}", BaseDateTime.CheckDecimalRegex); | ||
| 247 | 250 | ||
| 248 | - public static final String DateExtractor7 = "\\b{DayRegex}\\s*/\\s*{MonthNumRegex}((\\s+|\\s*,\\s*){DateYearRegex})?\\b" | ||
| 251 | + public static final String DateExtractor7 = "\\b{DayRegex}\\s*/\\s*{MonthNumRegex}((\\s+|\\s*,\\s*){DateYearRegex})?{BaseDateTime.CheckDecimalRegex}\\b" | ||
| 249 | 252 | .replace("{DayRegex}", DayRegex) | |
| 250 | 253 | .replace("{MonthNumRegex}", MonthNumRegex) | |
| 251 | - .replace("{DateYearRegex}", DateYearRegex); | ||
| 254 | + .replace("{DateYearRegex}", DateYearRegex) | ||
| 255 | + .replace("{BaseDateTime.CheckDecimalRegex}", BaseDateTime.CheckDecimalRegex); | ||
| 252 | 256 | ||
| 253 | - public static final String DateExtractor8 = "(?<=\\b(le)\\s+){DayRegex}[\\\\\\-]{MonthNumRegex}\\b" | ||
| 257 | + public static final String DateExtractor8 = "(?<=\\b(le)\\s+){DayRegex}[\\\\\\-]{MonthNumRegex}{BaseDateTime.CheckDecimalRegex}\\b" | ||
| 254 | 258 | .replace("{DayRegex}", DayRegex) | |
| 255 | - .replace("{MonthNumRegex}", MonthNumRegex); | ||
| 259 | + .replace("{MonthNumRegex}", MonthNumRegex) | ||
| 260 | + .replace("{BaseDateTime.CheckDecimalRegex}", BaseDateTime.CheckDecimalRegex); | ||
| 256 | 261 | ||
| 257 | - public static final String DateExtractor9 = "\\b{DayRegex}\\s*/\\s*{MonthNumRegex}((\\s+|\\s*,\\s*){DateYearRegex})?\\b" | ||
| 262 | + public static final String DateExtractor9 = "\\b{DayRegex}\\s*/\\s*{MonthNumRegex}((\\s+|\\s*,\\s*){DateYearRegex})?{BaseDateTime.CheckDecimalRegex}\\b" | ||
| 258 | 263 | .replace("{DayRegex}", DayRegex) | |
| 259 | 264 | .replace("{MonthNumRegex}", MonthNumRegex) | |
| 260 | - .replace("{DateYearRegex}", DateYearRegex); | ||
| 265 | + .replace("{DateYearRegex}", DateYearRegex) | ||
| 266 | + .replace("{BaseDateTime.CheckDecimalRegex}", BaseDateTime.CheckDecimalRegex); | ||
| 261 | 267 | ||
| 262 | - public static final String DateExtractorA = "\\b{DateYearRegex}\\s*[/\\\\\\-\\.]\\s*{MonthNumRegex}\\s*[/\\\\\\-\\.]\\s*{DayRegex}(?!\\s*[/\\\\\\-\\.]\\s*\\d+)" | ||
| 268 | + public static final String DateExtractorA = "\\b({DateYearRegex}\\s*[/\\\\\\-\\.]\\s*({MonthNumRegex}|{MonthRegex})\\s*[/\\\\\\-\\.]\\s*{DayRegex}|{MonthRegex}\\s*[/\\\\\\-\\.]\\s*{BaseDateTime.FourDigitYearRegex}\\s*[/\\\\\\-\\.]\\s*{DayRegex}|{DayRegex}\\s*[/\\\\\\-\\.]\\s*{BaseDateTime.FourDigitYearRegex}\\s*[/\\\\\\-\\.]\\s*{MonthRegex})(?!\\s*[/\\\\\\-\\.:]\\s*\\d+)" | ||
| 263 | 269 | .replace("{DateYearRegex}", DateYearRegex) | |
| 264 | 270 | .replace("{MonthNumRegex}", MonthNumRegex) | |
| 265 | - .replace("{DayRegex}", DayRegex); | ||
| 271 | + .replace("{MonthRegex}", MonthRegex) | ||
| 272 | + .replace("{DayRegex}", DayRegex) | ||
| 273 | + .replace("{BaseDateTime.FourDigitYearRegex}", BaseDateTime.FourDigitYearRegex); | ||
| 266 | 274 | ||
| 267 | 275 | public static final String OfMonth = "^\\s*de\\s*{MonthRegex}" | |
| 268 | 276 | .replace("{MonthRegex}", MonthRegex); | |
@@ -305,7 +313,7 @@ public class FrenchDateTime { | |||
| 305 | 313 | .replace("{PmRegex}", PmRegex) | |
| 306 | 314 | .replace("{OclockRegex}", OclockRegex); | |
| 307 | 315 | ||
| 308 | - public static final String BasicTime = "(?<basictime>{WrittenTimeRegex}|{HourNumRegex}|{BaseDateTime.HourRegex}:{BaseDateTime.MinuteRegex}(:{BaseDateTime.SecondRegex})?|{BaseDateTime.HourRegex})" | ||
| 316 | + public static final String BasicTime = "(?<basictime>{WrittenTimeRegex}|{HourNumRegex}|{BaseDateTime.HourRegex}(:|\\s*h\\s*){BaseDateTime.MinuteRegex}(:{BaseDateTime.SecondRegex})?|{BaseDateTime.HourRegex})" | ||
| 309 | 317 | .replace("{WrittenTimeRegex}", WrittenTimeRegex) | |
| 310 | 318 | .replace("{HourNumRegex}", HourNumRegex) | |
| 311 | 319 | .replace("{BaseDateTime.HourRegex}", BaseDateTime.HourRegex) | |
@@ -348,7 +356,7 @@ public class FrenchDateTime { | |||
| 348 | 356 | ||
| 349 | 357 | public static final String RestrictedTimeUnitRegex = "(?<unit>huere|minute)\\b"; | |
| 350 | 358 | ||
| 351 | - public static final String ConnectNumRegex = "{BaseDateTime.HourRegex}(?<min>00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59)\\s*{DescRegex}" | ||
| 359 | + public static final String ConnectNumRegex = "{BaseDateTime.HourRegex}(?<min>[0-5][0-9])\\s*{DescRegex}" | ||
| 352 | 360 | .replace("{BaseDateTime.HourRegex}", BaseDateTime.HourRegex) | |
| 353 | 361 | .replace("{DescRegex}", DescRegex); | |
| 354 | 362 | ||
@@ -446,7 +454,7 @@ public class FrenchDateTime { | |||
| 446 | 454 | ||
| 447 | 455 | public static final String TimeOfDayRegex = "\\b(?<timeOfDay>((((dans\\s+(l[ea])?\\s+)?((?<early>d[eé]but(\\s+|-)|t[oô]t(\\s+|-)(l[ea]\\s*)?)|(?<late>fin\\s*|fin de(\\s+(la)?)|tard\\s*))?(matin([ée]e)?|((d|l)?'?)apr[eè]s[-|\\s*]midi|nuit|soir([eé]e)?)))|(((\\s+(l[ea])?\\s+)?)jour(n[eé]e)?))s?)\\b"; | |
| 448 | 456 | ||
| 449 | - public static final String SpecificTimeOfDayRegex = "\\b(({RelativeRegex}\\s+{TimeOfDayRegex})|({TimeOfDayRegex}\\s*({NextSuffixRegex}))\\b|\\bsoir|\\bdu soir)s?\\b" | ||
| 457 | + public static final String SpecificTimeOfDayRegex = "\\b(({RelativeRegex}\\s+{TimeOfDayRegex})|({TimeOfDayRegex}\\s*({NextSuffixRegex}))\\b|\\b(du )?soir)s?\\b" | ||
| 450 | 458 | .replace("{TimeOfDayRegex}", TimeOfDayRegex) | |
| 451 | 459 | .replace("{RelativeRegex}", RelativeRegex) | |
| 452 | 460 | .replace("{NextSuffixRegex}", NextSuffixRegex); | |
@@ -470,15 +478,15 @@ public class FrenchDateTime { | |||
| 470 | 478 | public static final String TimeOfTodayAfterRegex = "^\\s*(,\\s*)?(en|dans|du\\s+)?{DateTimeSpecificTimeOfDayRegex}" | |
| 471 | 479 | .replace("{DateTimeSpecificTimeOfDayRegex}", DateTimeSpecificTimeOfDayRegex); | |
| 472 | 480 | ||
| 473 | - public static final String TimeOfTodayBeforeRegex = "{DateTimeSpecificTimeOfDayRegex}(\\s*,)?(\\s+([àa]|pour))?\\s*$" | ||
| 481 | + public static final String TimeOfTodayBeforeRegex = "{DateTimeSpecificTimeOfDayRegex}(\\s*,)?(\\s+([àa]|vers|pour))?\\s*$" | ||
| 474 | 482 | .replace("{DateTimeSpecificTimeOfDayRegex}", DateTimeSpecificTimeOfDayRegex); | |
| 475 | 483 | ||
| 476 | 484 | public static final String SimpleTimeOfTodayAfterRegex = "({HourNumRegex}|{BaseDateTime.HourRegex})\\s*(,\\s*)?(en|[àa]\\s+)?{DateTimeSpecificTimeOfDayRegex}" | |
| 477 | 485 | .replace("{HourNumRegex}", HourNumRegex) | |
| 478 | 486 | .replace("{BaseDateTime.HourRegex}", BaseDateTime.HourRegex) | |
| 479 | 487 | .replace("{DateTimeSpecificTimeOfDayRegex}", DateTimeSpecificTimeOfDayRegex); | |
| 480 | 488 | ||
| 481 | - public static final String SimpleTimeOfTodayBeforeRegex = "{DateTimeSpecificTimeOfDayRegex}(\\s*,)?(\\s+([àa]|vers))?\\s*({HourNumRegex}|{BaseDateTime.HourRegex})" | ||
| 489 | + public static final String SimpleTimeOfTodayBeforeRegex = "{DateTimeSpecificTimeOfDayRegex}(\\s*,)?(\\s+([àa]|vers|pour))?\\s*({HourNumRegex}|{BaseDateTime.HourRegex})" | ||
| 482 | 490 | .replace("{DateTimeSpecificTimeOfDayRegex}", DateTimeSpecificTimeOfDayRegex) | |
| 483 | 491 | .replace("{HourNumRegex}", HourNumRegex) | |
| 484 | 492 | .replace("{BaseDateTime.HourRegex}", BaseDateTime.HourRegex); | |
@@ -581,7 +589,7 @@ public class FrenchDateTime { | |||
| 581 | 589 | ||
| 582 | 590 | public static final String SinceRegex = "\\b(depuis)\\b"; | |
| 583 | 591 | ||
| 584 | - public static final String AroundRegex = "^[.]"; | ||
| 592 | + public static final String AroundRegex = "\\b(vers)\\b"; | ||
| 585 | 593 | ||
| 586 | 594 | public static final String AgoPrefixRegex = "\\b(y a)\\b"; | |
| 587 | 595 | ||
@@ -640,7 +648,7 @@ public class FrenchDateTime { | |||
| 640 | 648 | public static final String RelativeDayRegex = "\\b(((la\\s+)?{RelativeRegex}\\s+journ[ée]e))\\b" | |
| 641 | 649 | .replace("{RelativeRegex}", RelativeRegex); | |
| 642 | 650 | ||
| 643 | - public static final String ConnectorRegex = "^(,|pour|t|vers)$"; | ||
| 651 | + public static final String ConnectorRegex = "^(,|pour|t|vers|le)$"; | ||
| 644 | 652 | ||
| 645 | 653 | public static final String ConnectorAndRegex = "\\b(et\\s*(le|las?)?)\\b.+"; | |
| 646 | 654 | ||
@@ -1188,6 +1196,7 @@ public class FrenchDateTime { | |||
| 1188 | 1196 | public static final ImmutableMap<String, String> AmbiguityFiltersDict = ImmutableMap.<String, String>builder() | |
| 1189 | 1197 | .put("^([eé]t[eé])$", "(?<!((l\\s*['`]\\s*)|(cet(te)?|en)\\s+))[eé]t[eé]\\b") | |
| 1190 | 1198 | .put("^(mer)$", "(?<!((le|ce)\\s+))mer\\b") | |
| 1199 | + .put("^(avr|ao[uû]t|d[eé]c|f[eé]vr?|janv?|jui?[ln]|mars?|mai|nov|oct|sept?)$", "([$%£&!?@#])(avr|ao[uû]t|d[eé]c|f[eé]vr?|janv?|jui?[ln]|mars?|mai|nov|oct|sept?)|(avr|ao[uû]t|d[eé]c|f[eé]vr?|janv?|jui?[ln]|mars?|mai|nov|oct|sept?)([$%£&@#])") | ||
| 1191 | 1200 | .build(); | |
| 1192 | 1201 | ||
| 1193 | 1202 | public static final ImmutableMap<String, String> AmbiguityTimeFiltersDict = ImmutableMap.<String, String>builder() | |
| Back | FazBrowse Home | New Git URL |
0 commit comments