我正在使用正则表达式处理Android Java应用程序。 我试图验证一句话: "我想要一个xxx披萨"通过使用类似&#34的模式;我想要一个(TYPEA | TYPEB | TYPEC)披萨"。
一个例子: 我将模式设置为"我想要一个(萨拉米香肠|奶酪)披萨" 用户输入:"我想要一个萨拉米香肠披萨" 句子匹配正确,组(1)等于"萨拉米香肠"。 但是如果用户输入:"我想要一个capricciosa披萨"整个匹配器失败而不仅仅是组(1)。 是否可以修改正则表达式以避免匹配器在整个句子上失败并使其只是在组(1)位置获得空组?
希望我的解释清楚......先谢谢。
答案 0 :(得分:2)
接受整个字符串或拒绝整个字符串。
如果您想要一个空组,如果披萨的类型与salami|mushrooms|cheese
不匹配,您可以
"I want a (?:(salami|mushrooms|cheese)|(?:.*)) pizza"
(?: ...)
是一个非捕获组。并且|(?:.*)
将是“匹配任何逃避舱口”以允许接受整个字符串(但仍然使group(1)
为空)。
<强>演示:强>
Pattern p = Pattern.compile("I want a (?:(salami|mushrooms|cheese)|(?:.*)) pizza");
String[] tests = { "I want a salami pizza", "I want a shrimp pizza" };
for (String s : tests) {
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(s + ": " + m.group(1));
}
}
<强>输出:强>
I want a salami pizza: salami
I want a shrimp pizza: null