Program run forever when matching regex
我不知道为什么,但是当我尝试运行该程序时,看起来该程序将永远运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package fjr.test; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test3 { public static void main(String[] args){ String regex ="dssdfsdfdsf wdasdads dadlkn mdsds ."; Pattern p = Pattern.compile("^([a-zA-Z]+ *)+$"); Matcher match = p.matcher(regex); if(match.matches()){ System.out.println("Yess"); }else{ System.out.println("No.."); } System.out.println("FINISH..."); } } |
我需要做的是匹配包含一堆只用空格隔开的单词的模式
n
这确实会终止,但是大约需要10秒钟。一些观察:
- 从测试字符串的末尾删除句号可以使其速度更快。
-
将正则表达式中的*更改为(我相信实际上是您想要的)*使其速度更快。我认为该位置具有0个字符的选项会大大扩展状态空间。
我会使用:^(\\\\ w)* \\\\ w $"
表示一堆(单词空间),后跟一个单词。反对你的例子,它很快
您可以使用此正则表达式将所有单词都匹配为空格或不匹配。
样本:
1 | Pattern p = Pattern.compile("([a-zA-Z ]+)"); |
有趣的现象。这与贪婪量词的行为有关