gpt4 book ai didi

java - 在没有 anchor 的 Java 中不区分大小写的字符串匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:33 25 4
gpt4 key购买 nike

注意:这不是有关不区分大小写匹配的问题。这是一个关于 regex anchor 的问题。

我在用 Java 进行不区分大小写的基本匹配时遇到了很多麻烦:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class match {
public static void main(String[] args) {
String prompt="das101.lo1>";
String str="automate@DAS101.LO1>";

Pattern ignore = Pattern.compile(prompt.toUpperCase(), Pattern.CASE_INSENSITIVE);
Matcher mIgn = ignore.matcher(str);
if(mIgn.matches())
System.out.println(str+" Matches " + prompt.toUpperCase());
else
System.out.println(str+" Doesn't Match " + prompt.toUpperCase());

char[] cStr = str.toCharArray();
char[] cPrompt = prompt.toUpperCase().toCharArray();

/* Verify that strings match */
for(int i=cPrompt.length-1, j=cStr.length-1; i>=0 && j>=0 ; --i,--j) {
if (cPrompt[i]==cStr[j])
System.out.println("Same: "+ cPrompt[i]+":" + cStr[j]);
else
System.out.println("Different: "+ cPrompt[i]+":" + cStr[j]);
}
}
}

输出:

samveen@javadev-tahr:/tmp$ javac match.java
samveen@javadev-tahr:/tmp$ java match
automate@DAS101.LO1> Doesn't Match DAS101.LO1>
Same: >:>
Same: 1:1
Same: O:O
Same: L:L
Same: .:.
Same: 1:1
Same: 0:0
Same: 1:1
Same: S:S
Same: A:A
Same: D:D

如果我将 if(mIgn.matches()) 更改为 if(mIgn.find()),我将得到这个简单的字符串模式匹配:

samveen@javadev-tahr:/tmp$ javac match.java
samveen@javadev-tahr:/tmp$ java match
automate@DAS101.LO1> Matches DAS101.LO1>
Same: >:>
Same: 1:1
Same: O:O
Same: L:L
Same: .:.
Same: 1:1
Same: 0:0
Same: 1:1
Same: S:S
Same: A:A
Same: D:D

我哪里错了?

我提到了 Case-Insensitive Matching in Java RegExMethods of the Pattern Class

最佳答案

String.matches 要求整个字符串与模式匹配。好像该模式具有隐含的“^...$”。

Pattern ignore = Pattern.compile(".*" + Pattern.quote(prompt) + ".*",
Pattern.CASE_INSENSITIVE);

用于查找类似匹配项。

这可以用原始模式完成:

if (mIgn.find()) {
System.out.println("Found at position " + mIgn.start());
}

关于java - 在没有 anchor 的 Java 中不区分大小写的字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407040/

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