我正在尝试创建一个不区分大小写的前缀的正则表达式。我有以下但我不确定这是否正确:
String value1 = "97 ebt ue i ua so sufi iqc k";
String pattern1 = "(?=(\\b(?i:.*s.*)))(?=(\\b(?i:.*q.*)))";
在我的示例中,我尝试在pattern1
中找到value1
的匹配项。据我了解:
\\b
匹配字符串:.*
和.*
不区分大小写这适用于某些情况,但其他情况则失败。我无法弄清楚这个问题。
更新
这种情况在这里返回true但它应该返回false。问题是应该有任何以s
结尾的单词和以q
结尾的单词,所以因为它们中的任何一个都没有结束所以它应该失败。
答案 0 :(得分:1)
\\b
构造只是一个单词边界,它与单词不匹配。
(?i)
只能在开头使用一次,整个模式不区分大小写。
应该有任何以
s
结尾的单词和以q
结尾的单词,因为没有任何单词结束,所以它应该失败
使用
(?Ui)^(?=.*s\\b)(?=.*q\\b)
在这里,我们有两个锚定前瞻,需要在输入字符串内部以q
和s
结尾的两个单词(不区分大小写)。
以下是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
。