正则表达式最佳实践:多个模式或单个表达式组合表达式?

时间:2017-01-11 16:01:36

标签: java regex caching

考虑以下情况:

  1. 应用程序从服务器接收正则表达式列表( HTTP GET返回一个List,每个项目指示正则表达式。);
  2. 用户输入文本需要针对这些表达式进行验证;
  3. 应用程序在Android上运行,因此内存是一个问题;
  4. 经常更改 的表达列表。
  5. 什么会更好:

    1. 缓存多个Pattern对象,每个对象包含从服务器返回的单个正则表达式;
    2. 连接正则表达式 - (REGEX1)|(REGEX2)|(REGEX3)...|(REGEXN) - 并在内存中维护一个对象? - 每当添加或删除单个正则表达式时刷新它,经常不会发生

1 个答案:

答案 0 :(得分:1)

我不认为有一种方法可以回答这个问题而没有特定的正则表达式列表和输入列表。因为,每个正则表达式/输入组合将导致使用不同的内存量。这是我的直觉告诉我的:

  1. 一次评估正则表达式。在“OR”场景中,正则表达式必须同时评估所有的OR表达式,这样才能占用更多RAM。我相信。
  2. 按以下顺序排列正则表达式:(a)匹配的可能性,以便您可以放弃评估正则表达式的其余部分或(b)早期不匹配,以便可以快速丢弃正则表达式,因为永远不会匹配(例如“^ a”只需要评估字符串的第一个字符,其中“a”需要在整个字符串中搜索“a”。)
  3. 最终,只有测试才能真正告诉你什么需要更多时间/内存,我担心。