【问题标题】:Find same string with case insensitive [duplicate]查找不区分大小写的相同字符串[重复]
【发布时间】:2015-04-22 04:21:35
【问题描述】:

这可能是一个转储问题,我想在不区分大小写模式下找到确切的字符串。

所以假设我有字符串“Test”并且我找到了“test”,它应该返回“Test”。

我知道我可以通过简单地转换为小写并进行比较来做到这一点,但我只需要正则表达式解决方案

我试过了

    String test = "test";
    String patternString = "[\\$#@\\^&]" + test + "(\\s|$)";
    System.out.println("Test".matches(patternString));

虽然我期待为真,但它返回假。我真的不知道上面的表达是什么意思,这就是我在这里的原因。

编辑

我知道 String.equalsIgnoreCase(another) 方法,但我告诉我需要它以正则表达式的方式执行,因为我使用的是 spring mongoDB 环境,所以我可以使用正则表达式直接将正则表达式匹配到文档中。

【问题讨论】:

  • iignorecase 修饰符应该返回 true
  • @commit 为什么在开头添加[\\$#@\\^&]

标签: java regex


【解决方案1】:

要比较两个忽略大小写的字符串,您应该使用String.equalsIgnoreCase(another)。除非确实需要,否则不要使用正则表达式。

【讨论】:

  • 我认为他试图用这个"[\\$#@\\^&]" 模式做点什么
  • 听起来他明确表示他需要一个正则表达式......
  • Avinash:是的,但似乎他没有意识到 equalsIgnoreCase 的可能性,导致他更改字符串(小写)并比较它们。假设它必须是一个正则表达式确实是合理的,但同样合理的是,他认为他需要一个正则表达式来比较它们而不改变原始值,而他没有。
  • @commit 最好澄清一下你的意思,因为有不同的解决方案。
  • 我明确说过我需要它以正则表达式的方式,我知道equalsIgnoreCase方法。
【解决方案2】:

您需要使用不区分大小写的修饰符。

String patternString = "(?i)(?:^|[\\$#@\\^&])" + test + "(?:\\s|$)";

如有必要,在字符类[...] 中添加\\s

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多