具有撇号的单词的正则表达式(Java)

时间:2015-04-14 03:08:50

标签: java regex

我试图弄清楚正则表达式匹配只包含字母和撇号的字符串。如果一个字符串包含一个撇号,我只想匹配它,如果它的两边都有一个字母。

到目前为止我所拥有的是[a-zA-Z]+('[a-zA-Z])?

我想匹配以下字符串:

a'a
aa'a
a'aaa

但不是:

bb'
'bb

2 个答案:

答案 0 :(得分:4)

你几乎就在那里,只需要在可选组内的char类之后添加+

^[a-zA-Z]+('[a-zA-Z]+)?$

如果您想要处理多个撇号,请使用此选项。

^[a-zA-Z]+(?:'[a-zA-Z]+)*$

DEMO

String s = "a'a'a'a a' a'a-'bb";
String parts[] = s.split("[ -]");
for(String i:parts) {
    if(!i.isEmpty())
    {
    System.out.println(i + " => " + i.matches("[a-zA-Z]+(?:'[a-zA-Z]+)*"));
}
}

<强>输出:

a'a'a'a => true
a' => false
a'a => true
'bb => false

答案 1 :(得分:0)

 public static void main(String[] args) {
        String s = "a'a'a";
        Pattern pattern = Pattern.compile("^[a-zA-Z]+(?:'[a-zA-Z]+)*$");
        Matcher matcher = pattern.matcher(s);
        if (matcher.matches()) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

    }

<强>输出

false