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

bph*_*phi 4 java regex

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

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

我想匹配如下字符串:

a'a
aa'a
a'aaa
Run Code Online (Sandbox Code Playgroud)

但不是:

bb'
'bb
Run Code Online (Sandbox Code Playgroud)

Avi*_*Raj 5

你快到了,只是你需要+在可选组中存在的字符类之后添加。

^[a-zA-Z]+('[a-zA-Z]+)?$
Run Code Online (Sandbox Code Playgroud)

或者

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

^[a-zA-Z]+(?:'[a-zA-Z]+)*$
Run Code Online (Sandbox Code Playgroud)

演示

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]+)*"));
}
}
Run Code Online (Sandbox Code Playgroud)

输出:

a'a'a'a => true
a' => false
a'a => true
'bb => false
Run Code Online (Sandbox Code Playgroud)