java - 正则表达式挂起 - Java 匹配器

标签 java regex string

字符串:

Aqua, Sodium Laureth Sulfate, Sodium Lauryl Sulfate, Dimethicone, Cocamide MEA, Zinc Carbonate, Glycol Distearate, Sodium Chloride, Zinc Pyrithione, Sodium Xylenesulfonate, Cetyl Alcohol, Parfum, Guar Hydroxypropyltrimonium Chloride, Magnesium Sulfate, Sodium Benzoate, Ammonium Laureth Sulfate, Magnesium Carbonate Hydroxide, Linalool, Butylphenyl Methylpropional, Limonene, Hydroxyisohexyl 3-Cyclohexene Carboxaldehyde, Benzyl Alcohol, Hexyl Cinnamal, Citronellol, Tocopheryl Acetate, Paraffinum Liquidum, Sodium Polynaphthalenesulfonate, CI 19140, DMDM Hydantoin, CI 15510, Methylchloroisothiazolinone, Disodium EDTA, Tetrasodium EDTA, Methylisothiazolinone.

当前正则表达式:

System.out.println(string.matches("([\\W]*\\b[A-Z\\d]\\w+\\b[\\W]*)+"));

Java 应用程序挂起。我在正则表达式中找不到错误。通过谷歌搜索,我发现这可以称为“灾难性回溯”!? 如果字符串仅包含大写单词,则正则表达式应与字符串匹配 例如,如果 1 个单词是小写的,则不应与其匹配。

最佳答案

我建议您按单词拆分输入字符串,然后进行模式匹配,更简单:如果您只想测试每个单词的第一个字母是否大写,则不要进行模式匹配,例如:

for (String s : string.split("\\W")) {
  if (s.charAt(0) < 'A' || s.charAt(0) > 'Z') {
    return false;
  }
}

对我来说听起来快得多(如果需要,您甚至可以得到失败的单词)。

关于java - 正则表达式挂起 - Java 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194456/

相关文章:

java - 使用 Spring,如何获取具有特定实例的类的列表?

java - 为什么 Spring Web 服务中 Autowiring 依赖项的注入(inject)失败?

javascript - 正则表达式 - 为什么空括号?

java - 计算字符串中的某个字符(Java)

jquery - 解析时间字符串jQuery

ios - API 响应访问“发件人”和“收件人”邮件的名称

Java:如何在 Java 中将 File 对象转换为 String 对象?

java - 如何插入MongoDB数组

r - 如何使用 gsub 在 for 循环中找到精确匹配?

php - preg_match_all 如何获得*所有*组合?甚至重叠的