Java Regex:仅在单词的开头找到匹配项

时间:2013-06-14 11:56:35

标签: java regex

例如,我有一组字符串:

"Abc zcf",
"Abcd zcf",
"Zcf Abc",
"Zcf Abcd",
"Test ez",
"Rabc Jabc"

如何在这个集合字符串中找到任何单词以“abc”字符开头? 在我的例子中,它将是字符串

"Abc zcf",
"Zcf Abc",
"Abcd zcf",
"Zcf Abcd"

4 个答案:

答案 0 :(得分:6)

您必须使用Pattern

final Pattern p = Pattern.compile("\\bAbc");

// ...

if (p.matcher(input).find())
    // match

仅供参考,\b是锚点。 Java对单词字符的定义是下划线,数字或字母。

答案 1 :(得分:3)

您需要匹配任何内容,后跟单词边界,然后是abc。您还希望以不区分大小写的方式执行此操作。模式

(?i).*\\babc.*

会工作吗?一个简单的例子

public static void main(String[] args) throws Exception {
    final Pattern pattern = Pattern.compile("(?i).*\\babc.*");

    final String[] in = {
        "Abc zcf",
        "Abcd zcf",
        "Zcf Abc",
        "Zcf Abcd",
        "Test ez",
        "Rabc Jabc"};

    for (final String s : in) {
        final Matcher m = pattern.matcher(s);
        if (m.matches()) {
            System.out.println(s);
        }
    }
}

输出:

Abc zcf
Abcd zcf
Zcf Abc
Zcf Abcd

修改

此外,@ fge关于匹配整个模式的评论是在String中搜索模式的一种更简洁的方法。

public static void main(String[] args) throws Exception {
    final Pattern pattern = Pattern.compile("(?i)(?<=\\b)abc");

    final String[] in = {
        "Abc zcf",
        "Abcd zcf",
        "Zcf Abc",
        "Zcf Abcd",
        "Test ez",
        "Rabc Jabc"};

    for (final String s : in) {
        final Matcher m = pattern.matcher(s);
        if (m.find()) {
            System.out.println(s);
        }
    }
}

这说明发现abc 前面有 \b - 即字边界。输出是一样的。

答案 2 :(得分:1)

您可以使用:

if( maChaine.startWith("Abc") ) 
{ 

    list.add( maChaine ) ; 
}

答案 3 :(得分:0)

试试这个正则表达式来解决你的问题:

(^Abc| Abc)