【问题标题】:Regex to find words in order but in between other words正则表达式按顺序查找单词但在其他单词之间
【发布时间】:2016-03-09 01:06:01
【问题描述】:

我在为特定场景实施正则表达式时遇到问题。

假设输入是从“快速棕色狐狸跳过懒狗”中搜索的“棕色狗”。它应该在以下条件下返回 true:

  1. -不区分大小写
  2. -必须按顺序排列(第一个单词是“the”,第二个是“brown”,第三个是“dog”)。

这意味着像“the dog brown”、“fox brown”、“the quick fox brown”这样的输入会返回 false,但“the dog”、“quick brown”、“jumps over the”会返回 true。我希望我提供了足够的样本。

到目前为止,我的正则表达式 "(?i)(?:\\S+\\s)?\\S*"+targetString+"\\S*(?:\\s\\S+)?" 仅适用于精确字符串,但不适用于其他单词。

【问题讨论】:

  • 你找到解决这个问题的方法了吗?

标签: java android regex


【解决方案1】:
String reg = "";
for(String s:targetString.split(' '))
   reg+= s + "(\\s|\\S)*";
//Compile reg as regex and match using pattern

this

【讨论】:

  • 为什么是"(\\s|\\S)*"?这将导致回溯问题。
  • @stribizhev 很抱歉我没听懂。你能解释一下你想说什么吗?
  • 只是为了匹配任何字符,你需要使用Pattern.DOTALL修饰符和.*子模式。
  • @stribizhev 可以有其他解决方案:P...递归拆分 testString 在术语的基础上并从 1 to N 中搜索数组以获取第二个术语,依此类推,直到找到匹配项最后一个学期:P 不过,这将对 cpu 造成严重破坏..
  • @stribizhev 好吧,我猜 java 编译器会在编译正则表达式时处理该优化。我只是试图提供一个快速的解决方案。但也可以有其他解决方案。
猜你喜欢
  • 2020-08-03
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多