我试图弄清楚正则表达式匹配只包含字母和撇号的字符串。如果一个字符串包含一个撇号,我只想匹配它,如果它的两边都有一个字母。
到目前为止我所拥有的是[a-zA-Z]+('[a-zA-Z])?
我想匹配以下字符串:
a'a
aa'a
a'aaa
但不是:
bb'
'bb
答案 0 :(得分:4)
你几乎就在那里,只需要在可选组内的char类之后添加+
。
^[a-zA-Z]+('[a-zA-Z]+)?$
或强>
如果您想要处理多个撇号,请使用此选项。
^[a-zA-Z]+(?:'[a-zA-Z]+)*$
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