gpt4 book ai didi

java - 条件正则表达式搜索

转载 作者:行者123 更新时间:2023-11-30 09:46:26 25 4
gpt4 key购买 nike

我正在尝试用 Java 创建一个具有条件搜索词的正则表达式代码。

我的意思是假设我有 5 个词;树、车、狗、猫、鸟。现在我想要搜索这些术语的表达式,但是只需要匹配五个中的三个,它可以是它选择匹配的 5 个中的任何一个。

我想也许使用反向引用 ?(3) 会起作用,但似乎没有用。

标准的可选搜索 (?) 也不起作用,因为所有术语都是可选的,但所需的匹配项数量不是。本质上有没有一种方法可以创建一个必须有 50%(或任何百分比)正确率才能提供匹配的字符串?

有没有人碰巧知道或可以指出正确的方向?

(如果可能的话,我希望它能在客户端工作)

最佳答案

它是否必须是一个没有任何进一步代码的独立正则表达式?对每个单词进行简单的循环测试并计算匹配项应该可以完美地做到这一点。假设您想要 N 个唯一匹配项的伪代码(您也可以将子字符串测试与正则表达式交换,只要您将唯一匹配项的计数保持在正则表达式之外,您如何确定匹配项并不重要):

bool has_N_words(int n, string[] words, string text) {
int matches = 0;
foreach word in words {
if (word.substringOf(text)) counter++
if (counter >= n) return true
}
return false
}

在我看来,这似乎是唯一的(除了令人震惊的模糊正则表达式扩展的使用——并不是我有什么想法,我只是一次又一次地惊讶于现代正则表达式实现允许的东西)用常规的方式来做到这一点表达式是这样的:

  1. 枚举所有唯一的(忽略顺序或不取决于实现,见下文)单词排列
  2. 对于每个排列,构建一个子正则表达式来匹配包含这些单词的字符串,或者通过
    1. .*? 连接前三个词(这需要所有唯一排列)
    2. 使用三个前瞻断言,如 (?=.*word)(这允许删除之前以不同顺序出现的单词组合)
  3. 将所有子正则表达式组合成一个巨大的或。

手动完成这是不切实际的,丑陋和复杂(如在计算复杂性方面,而不是在编程工作中)自动完成,而且效率低下,而且无论哪种方式都非常棘手。

关于java - 条件正则表达式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7141020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com