使用正则表达式匹配模式Java

时间:2015-03-03 01:58:53

标签: java regex

我有两个单词列表,

答:坑坑洼洼的slaptwo喘息,

B:pt Pot泥炭部分

我必须创建一个正则表达式模式,对于A列中的所有内容都返回true,对于B列中的所有内容都返回false。我认为有一些事情我从根本上会对正则表达式产生误解,因为我提出的所有内容最终都会产生一个我不想要它的额外假。主要是我无法弄清楚如何禁止彼此相邻的两个元音。

这就是我所拥有的:

public static void main(String[] args){
    String[] check = {"pit","spot","spate","slaptwo","respite","pt","Pot","peat","part"};
    Pattern p = Pattern.compile("([psr][^t(ea)][^r])\\w*");

    ArrayList<Matcher> M = new ArrayList<Matcher>();
    for (int i = 0; i < check.length; i++) {
        M.add(p.matcher(check[i]));
    }

    for (int j = 0; j < M.size(); j++){ 
        System.out.println("Return Value:" +check[j] + "\t"+ M.get(j).matches());
    } 
}

我现在明白了(ea)并没有被视为一件事,因此当我不想要它时,它会导致暂缓,其他一切都会返回正确的值。正如我之前所说,我需要知道如何禁止两个元音彼此相邻。或者,如果我在这里缺少一些基本的东西?

1 个答案:

答案 0 :(得分:1)

您不能在字符类中使用分组构造。

要禁止“ea”,您可以在此处使用否定前瞻。

[psr](?!ea)[^t][^r]\\w*

Live Demo