正则表达句子或问题

时间:2018-03-06 09:05:24

标签: android regex pattern-matching

        String regex ="((?:get|what is) number)";
        Pattern pattern = Pattern.compile(regex);       
        String text ="what is the number";
        Matcher matcher = pattern.matcher(text);
        boolean flag= matcher.matches();
        Log.i("===matches or not??","==="+flag);

因此,文字可能是"得到号码","得到号码","号码是什么","什么' s号码","告诉我号码","给我号码"

我的代码适用于"获取数字"和"什么是数字" 在哪里""是可选的。并且我无法在上面的正则表达式中添加"作为可选字段"

所以,如果我提供输入"数字是什么"然后它将返回false。

1 个答案:

答案 0 :(得分:3)

您可以添加一个包含(?:\s+the)?

字样的可选组
String regex ="((?:tell me|g(?:et|ive me)|what(?:\\s+i|')s)(?:\\s+the)?\\s+number)";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);       
String text ="what is the number";
Matcher matcher = pattern.matcher(text);
boolean flag= matcher.matches();

请参阅Java demo online

模式看起来像

((?:tell me|g(?:et|ive me)|what(?:\s+i|')s)(?:\s+the)?\s+number)
                                           ^^^^^^^^^^^ 

注意我用\s+替换空格以匹配任何1+空格字符,并使用Pattern.CASE_INSENSITIVE标志编译正则表达式以启用不区分大小写的匹配。我还添加了替代方案以匹配输入字符串的更多变体。

请参阅regex online demo