Java在包含点时不区分大小写

Java在包含点时不区分大小写,java,regex,Java,Regex,我在Java中使用不区分大小写的模式时遇到了问题 根据我的理解,字符串: “1-800 flowers.com,CO.” 应与正则表达式模式匹配: “(\s |^)((?i)\Q1-800 FLOWERS.COM,CO.\E)(\s |$)” 但是,在Java中构建此模式时,它与 我认为问题与区分大小写有关,因为以下字符串不匹配(我只将“.com”更改为“.com”): “1-800 flowers.COM,CO.” 我就是这样用Java构建它的: String phraseToReplace=

我在Java中使用不区分大小写的模式时遇到了问题

根据我的理解,字符串:

“1-800 flowers.com,CO.”

应与正则表达式模式匹配:

“(\s |^)((?i)\Q1-800 FLOWERS.COM,CO.\E)(\s |$)”

但是,在Java中构建此模式时,它与

我认为问题与区分大小写有关,因为以下字符串不匹配(我只将“.com”更改为“.com”):

“1-800 flowers.COM,CO.”

我就是这样用Java构建它的:

String phraseToReplace="1-800 flowers.com, CO.";
Pattern pattern = Pattern.compile("(\\s|^)((?i)" + Pattern.quote(phraseToReplace) + ")(\\s|$)", Pattern.MULTILINE);
我尝试了使用和不使用Pattern.MULTILINE(我想它可能会将点转换为一条新线…)并尝试使用Pattern.CASE\u构建它。 它不匹配


你能认识到我做错了什么吗/建议我怎样才能使它起作用

这里有一个解决问题的方法,它似乎是关于
String
忽略大小写而不是不区分大小写的匹配

重述:

  • (?i)
    模式。不区分大小写
    标志匹配不区分大小写
  • 您组的输出是匹配的内容,大小写与您匹配的文本没有区别
  • 要比较
    String
    s忽略大小写,请使用
    String.equalsIgnoreCase
  • 要比较
    String
    s中的
    String
    s忽略大小写,请在这两个术语上使用
    toLowerCase
    toUpperCase
    (警告,性能可能会很昂贵)

输出

Matched: "1-800 flowers.COM, CO."
Equals to "phraseToReplace"? false
Equals to "phraseToReplace" ignoring case? true
Contained in "sentence"? false
Contained in "sentence" ignoring case? true

花和花其实不一样。无论如何,对Java来说不是。你可以试着先把原来的字符串改成大写?建议。。与其使用\\s来匹配开头/结尾的空格,不如修剪字符串()并使用不带\\s的正则表达式?@gexicide他使用
Pattern.quote(phraseToReplace)
来转义它
Pattern.compile(\\s |^)((?i)\\Q1-800 FLOWERS.COM,CO.\\E)(\\s |$)”,Pattern.MULTILINE.matcher(“1-800 FLOWERS.COM,CO.”).find()
outputs
true
…我使用:
Matcher Matcher=pattern.Matcher(phraseTOReplace.toUpperCase());System.out.println(matcher.matches()),它返回true…我运行了代码-它正在工作。继续搜索为什么我的不是,发现问题是我的句子被删掉了(因为客户端和服务器之间的另一个进程…)。它实际上是作为
phraseToReplace=“1-800 flowers.com,”
(没有公司,因此不匹配)。。。我现在要解决它。。。对这个错误感到抱歉,我真的很感谢你的帮助@卡迈尔·鲍梅尔·埃兹拉没问题。
Matched: "1-800 flowers.COM, CO."
Equals to "phraseToReplace"? false
Equals to "phraseToReplace" ignoring case? true
Contained in "sentence"? false
Contained in "sentence" ignoring case? true