gpt4 book ai didi

Java - 模式匹配

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

我在 php 中有一些代码是使用 preg_grep 编写的,用于以任何上下文中可能存在的任何顺序匹配多个单词。我正在尝试将其转换为 Java,但我似乎无法弄明白。

我将关键字转换为正则表达式字符串的 php 代码是:

function createRegexSearch($keywords)
{
$regex = '';
foreach ($keywords as $key)
$regex .= '(?=.*' . $key . ')';
return '/^' . $regex . '/i';
}

它会创建一个类似于/^(?=.*bot)/i 的正则表达式字符串 - 它应该匹配 robot、robots、bots 等。相同的正则表达式字符串在 java 中似乎不起作用,这让我很困惑使困惑。目前在 Java 中,我使用 contains 创建了类似的效果,但更愿意使用正则表达式。

for (Map.Entry<String, String> entry : mKeyList.entrySet())
{
boolean found = true;
String val = entry.getValue().toLowerCase();
for (int i = 0; i < keywords.length; i++)
{
if (!val.contains(keywords[i].toLowerCase()))
found = false;
}

if (found)
ret.add(entry.getValue());
}

最佳答案

Java 与许多语言不同的一件事是有两种不同的方法来“匹配”正则表达式与目标 - “matches()” 与 “find()” - matches 等同于将 ^$ 位于表达式的开头和结尾,而 find 查找 第一个匹配项(无论它在字符串中的什么位置)- 例如,当您可能能够在目标字符串robotsfind().*bot,说matches()是不对的 目标...我不完全确定前瞻会如何影响这个...

如果没有发布的 Java 代码(包含问题),很难告诉您可能哪里出错了,但我的猜测是它很容易出现在这个区域。

此外,在 Java(和 .Net)中将 /i 放在表达式的末尾相当于将 (?i) 放在表达式的开头(或您想要区分大小写的任何区域)。因此,/[a-f0-9]/i 等同于 (?i)[a-f0-9]

关于Java - 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055328/

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