如何在开头确定正则表达式的静态部分?

时间:2015-04-25 15:08:36

标签: java regex

有没有一种安全的方法来确定正则表达式的一部分是静态的,即只匹配一个字符串?

我有一个文件路径的正则表达式,我想在开头提取那个不需要正则表达式的部分,这样我就可以执行直接搜索来加速性能。

例如:

  • /some/path/.*\.jpg => /some/path/.*\.jpg
  • /files/[0-9a-f]{32}/.* => /files/[0-9a-f]{32}/.*
  • .* =>空字符串和.*
  • /abc\.data/.* => /abc.data/.*

修改

该模式可以具有任何有效形式。也许它在开始时甚至没有静态部分,但在大多数情况下都是如此。

编辑2

我的应用程序正在获取文件路径并搜索数据库中与文件路径匹配的模式。该表还包含有关应对文件执行的操作的信息。但是,当我匹配每个字符串时,搜索模式会花费很多时间,因为我总是需要扫描整个表。如果我可以在开始时提取静态部分,我可以限制我必须检查的模式数量。

1 个答案:

答案 0 :(得分:0)

假设输入正确,您可以在char的第一次出现时拆分字符串(正则表达式),即正则表达式的“关键字”。这样,你可以获得正则表达式的静态部分,然后是真正的正则表达式。