具有不区分大小写的前缀的正则表达式

时间:2015-10-15 20:55:44

标签: java regex pattern-matching

我正在尝试创建一个不区分大小写的前缀的正则表达式。我有以下但我不确定这是否正确:

String value1 = "97 ebt ue i ua so sufi iqc k";
String pattern1 = "(?=(\\b(?i:.*s.*)))(?=(\\b(?i:.*q.*)))";

在我的示例中,我尝试在pattern1中找到value1的匹配项。据我了解:

  1. \\b匹配字符串
  2. 中的任何字词
  3. :.*.*不区分大小写
  4. 这适用于某些情况,但其他情况则失败。我无法弄清楚这个问题。

    更新

    这种情况在这里返回true但它应该返回false。问题是应该有任何以s结尾的单词和以q结尾的单词,所以因为它们中的任何一个都没有结束所以它应该失败。

1 个答案:

答案 0 :(得分:1)

\\b构造只是一个单词边界,它与单词不匹配。

(?i)只能在开头使用一次,整个模式不区分大小写。

  

应该有任何以s结尾的单词和以q结尾的单词,因为没有任何单词结束,所以它应该失败

使用

(?Ui)^(?=.*s\\b)(?=.*q\\b)

在这里,我们有两个锚定前瞻,需要在输入字符串内部以qs结尾的两个单词(不区分大小写)。

以下是code demo

String value1 = "97 ebts ue i ua so sufi iqc k";
String pattern1 = "(?Ui)^(?=.*s\\b)(?=.*q\\b)";
Pattern ptrn = Pattern.compile(pattern1);
Matcher matcher = ptrn.matcher(value1);
if (matcher.find())
    System.out.println("true");
else
    System.out.println("false");

如果你想知道?U意味着它只是在Unicode字符串中“修复”\b字边界。如果您不使用拉丁文以外的任何字母,则可以删除U