如何确定正则表达式使用Java API无法匹配

前端之家收集整理的这篇文章主要介绍了如何确定正则表达式使用Java API无法匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有测试我用正则表达式验证输出。当它失败时,报告输出X与正则表达式Y不匹配。

我想添加一些指示字符串中匹配失败的位置。例如。在追溯之前,匹配者在字符串中最远的是什么? Matcher.hitEnd()是我正在寻找的一个例子,但是我想要一些比较通用的东西。

这可以做吗

如果匹配失败,则Match.hitEnd()会告诉您是否有较长的字符串匹配。此外,您可以指定要搜索的输入序列中的一个区域来查找匹配项。所以如果你有一个不匹配的字符串,你可以测试它的前缀来查看匹配失败的位置:
  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3.  
  4. public class LastMatch {
  5. private static int indexOfLastMatch(Pattern pattern,String input) {
  6. Matcher matcher = pattern.matcher(input);
  7. for (int i = input.length(); i > 0; --i) {
  8. Matcher region = matcher.region(0,i);
  9. if (region.matches() || region.hitEnd()) {
  10. return i;
  11. }
  12. }
  13.  
  14. return 0;
  15. }
  16.  
  17. public static void main(String[] args) {
  18. Pattern pattern = Pattern.compile("[A-Z]+[0-9]+[a-z]+");
  19. String[] samples = {
  20. "*ABC","A1b*","AB12uv","AB12uv*","ABCDabc","ABC123X"
  21. };
  22.  
  23. for (String sample : samples) {
  24. int lastMatch = indexOfLastMatch(pattern,sample);
  25. System.out.println(sample + ": last match at " + lastMatch);
  26. }
  27. }
  28. }

这个类的输出是:

  1. *ABC: last match at 0
  2. A1b*: last match at 3
  3. AB12uv: last match at 6
  4. AB12uv*: last match at 6
  5. ABCDabc: last match at 4
  6. ABC123X: last match at 6

猜你在找的正则表达式相关文章