【发布时间】:2014-03-26 05:24:13
【问题描述】:
我正在检查作为标题的关键字,输入完全超出我的控制。
所以我发现他们会将第一个字母大写,但也可能全部大写。
我可以做一个 Java 模式:
Pattern test = Pattern.compile("\\b(FOO|BAR|Foo|Bar)\\b");
并且用它做一个模式匹配器工作正常。如:
boolean ans = test.matcher(sometext).find();
但是,当我有 6 或 8 个关键字要检查时,所有关键字都出现两次就开始变得有点难看。
谁能想出一个更优雅的正则表达式来做到这一点?
谢谢
于 2015 年 3 月 26 日添加
让我再次强调一下,这并不像最初建议的那样完全忽略大小写那么简单。第一个字母确实需要大写,字符串的其余部分可以大写也可以小写。
【问题讨论】:
-
大多数正则表达式引擎都有一个用于 'ignorecase' 的 'i' 选项——我敢打赌 Java 也有,但我不知道它到底是什么。那会匹配太多(例如 fOo),但这是一个问题吗? [编辑:也许
Pattern test = Pattern.compile("\\b(foo|bar)\\b", Pattern.CASE_INSENSITIVE);] -
一旦你编译了模式,通过生成的状态机有很多遍历路径并不是真正的问题(除非我们说的是数百万,这样你可能会耗尽内存)。为方便起见,您可能希望以编程方式从字符串列表生成模式,只是因为这使代码更易于维护(调试复杂正则表达式中的拼写错误令人生畏)。
标签: regex capitalization