首页 > 解决方案 > 我正在尝试质疑正则表达式匹配

问题描述

'[loc]' 必须包含在开头,后面的任何字符都没有关系。如何用正则表达式表达它?前任)

>>> [loc]korea
true
>>> [loc] 
false // (One or more strings must follow [loc])
>>> [lll]seoul
false
>>> busan 
false

我用过Java,我真的想不出来。求兄弟们帮忙

            String pattern = "\\[(loc)\\]"; 
            String val = "[loc]seoul"; 
            String val2 = "[loc]";
            String val3 = "seoul";
        
            boolean regex = Pattern.matches(pattern, val);
            System.out.println(regex);
            boolean regex2 = Pattern.matches(pattern, val2);
            System.out.println(regex2);
            boolean regex3 = Pattern.matches(pattern, val3);
            System.out.println(regex3);

标签: javaregex

解决方案


我知道您有一些字符串,一个关键字,它必须出现在字符串的开头。在这种情况下,您需要Pattern.quote转义任何需要转义的特殊字符并使用.+模式来匹配一个或多个 chars。(如果您的第一个问题句是正确的并且您不关心后面的内容,您也可以考虑.*匹配任何零个或多个字符的模式。)要匹配默认情况下不匹配的[loc]换行符,您需要传递选项,或在你的模式前加上inline 修饰符。.Pattern.DOTALL(?s)

解决方案看起来像

List<String> vals = Arrays.asList(
    "[loc]seoul", "[loc]", "seoul"
);
String keyword = "[loc]";
String pattern = Pattern.quote(keyword) + ".+";
Pattern p = Pattern.compile(pattern, Pattern.DOTALL);
for (String val : vals) {
    System.out.println(val + ": \"" + p.matcher(val).matches() + "\"");
}

请参阅Java 演示。输出:

[loc]seoul: "true"
[loc]: "false"
seoul: "false"

推荐阅读