小编car*_*iem的帖子

java中的正则表达式中的无限循环

我的目的是匹配这种不同的网址:
url.com
my.url.com
my.extended.url.com
a.super.extended.url.com
等等......

所以,我决定构建正则表达式,在网址的开头和结尾有一个字母或数字,并且有一个包含字母数字字符和点的无限数量的"子域".例如,在"my.extended.url.com"中,"my"中的"m"是正则表达式的第一个类,"com"中的"m"是正则表达式的最后一个类,而"y.", "扩展".和"网址".是正则表达式的第二类.

使用下面代码中的模式和主题,我希望find方法返回false,因为此url必须不匹配,但它使用100%的CPU并且似乎保持无限循环.

    
    String subject = "www.association-belgo-palestinienne-be";
    Pattern pattern = Pattern.compile("^[A-Za-z0-9]\\.?([A-Za-z0-9_-]+\\.?)*[A-Za-z0-9]\\.[A-Za-z]{2,6}");

    Matcher m = pattern.matcher(subject);
    System.out.println("    Start");
    boolean hasFind = m.find();
    System.out.println("    Finish : " + hasFind);
  

其中只打印:

  
      Start
  

我无法使用正则表达式测试程序重现问题.
这是正常的吗?问题来自我的正则表达式吗?
可能是因为我的Java版本(1.6.0_22-b04/JVM 64 bit 17.1-b03)?

在此先感谢您的帮助.

java regex

10
推荐指数
3
解决办法
1万
查看次数

标签 统计

java ×1

regex ×1