有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓通过Java中的正则表达式模式验证输入选项

我正在使用regex开发Android Java应用程序。 我想验证一句话,比如: “我想要一个xxx比萨饼”,使用类似“我想要(a型| B型| C型)比萨饼”的模式

举个例子: 我将模式设置为“我想要(意大利腊肠|蘑菇|奶酪)披萨” 用户输入:“我想要一个意大利腊肠披萨” 句子匹配正确,第(1)组等于“萨拉米”。 但如果用户输入:“我想要一个随想披萨”,整个匹配器就会失败,而不仅仅是组(1)。 正则表达式是否可以被修改,以避免匹配器在整个句子中失败,并使其仅在组(1)位置得到一个空组

希望我的解释清楚。。。。提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    要么接受整个字符串,要么拒绝整个字符串

    如果你想要一个空组,如果披萨的类型不匹配salami|mushrooms|cheese,你可以这样做

    "I want a (?:(salami|mushrooms|cheese)|(?:.*)) pizza"
    

    (?: ...)是一个非捕获组。并且|(?:.*)将是一个“匹配任何内容转义图案填充”,以允许接受整个字符串(但仍使group(1)为null)

    演示:

    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