在正则表达式中测试FOO或BAR或Foo或Bar的最佳方法是什么?

时间:2014-03-26 05:24:13

标签: regex capitalization

我正在检查标题的关键字,输入完全不受我控制。

所以我发现他们将首字母大写,但也可能全部上限。

我可以做一个Java模式:

Pattern test = Pattern.compile("\\b(FOO|BAR|Foo|Bar)\\b");

使用它做一个模式匹配工作正常。如:

boolean ans = test.matcher(sometext).find();

然而,当我有6个或8个关键字要检查时,它开始变得有点丑陋,让所有关键字都有两次。

任何人都可以提出一个更优雅的正则表达式吗?

由于

ADDED 3/26/15

让我再次强调,它并不像完全忽略案件那么简单,这是最初的建议。第一个字母确实需要大写,其余的字符串可以是大写或更低。

2 个答案:

答案 0 :(得分:0)

使用“忽略大小写”标记(?i)

Pattern test = Pattern.compile("(?i)\\b(FOO|BAR)\\b");

答案 1 :(得分:0)

您不需要\\b\\b,因为任何正常情况都会被视为单词而不是字符类。

也使用i(ignoreCase)修饰符。

你的正则表达式应该是:

(foo|bar)

根据您的语言添加i修饰符

另外,你说“要测试”。使用正则表达式是过度的。

这样做:

String Str = new String("Welcome to Foo bar ");
Str = Str.toLowerCase();
return Str.contains("foo")||Str.contains("bar"); // returns true or false