Java 正则表达式城市名称

Java 正则表达式城市名称,java,regex,Java,Regex,我使用此正则表达式检查field City: "[a-zA-Z]+[[ '-]?[a-zA-Z]+]*" 但它也适用于以下名称: 圣安杰洛 安德里亚------巴列塔 我希望单词之间的特殊字符“、”和“-”必须是一个且只有一个。例如: 圣安杰洛-迪伦巴第酒店 它必须是好的,但不是: 圣安杰洛——伦巴第 您希望在重复中使用括号: [a-zA-Z]+(?:[ '-][a-zA-Z]+)* 您尝试的(['-]?[a-zA-Z]+])意味着一个字符类,包含['-]、?、[a-zA-Z]和+,实际上与

我使用此正则表达式检查field City:

"[a-zA-Z]+[[ '-]?[a-zA-Z]+]*"
但它也适用于以下名称:

圣安杰洛

安德里亚------巴列塔

我希望单词之间的特殊字符“、”和“-”必须是一个且只有一个。例如:

圣安杰洛-迪伦巴第酒店

它必须是好的,但不是:

圣安杰洛——伦巴第


您希望在重复中使用括号:

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

您尝试的(
['-]?[a-zA-Z]+]
)意味着一个字符类,包含
['-]
[a-zA-Z]
+
,实际上与
[a-zA-Z?+'-]
等效。另一个had上的子模式用
分隔,
?:
使其不捕获,这是一个轻微的优化。

是否要使用括号重复:

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

您尝试的(
['-]?[a-zA-Z]+]
)意味着一个字符类,包含
['-]
[a-zA-Z]
+
,实际上与
[a-zA-Z?+'-]
等效。另一个had上的子模式用
分隔,
?:
使其不捕获,这是一个轻微的优化。

使用此代码验证城市:

public static boolean validateCity( String city )
{
return city.matches( "([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)" );
}

使用此代码验证城市:

public static boolean validateCity( String city )
{
return city.matches( "([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)" );
}

美国人不会喜欢你的,你的regexp不接受华盛顿特区。:)这是真的。经过一点改变,现在它也喜欢美国人:)美国人不会喜欢你,你的regexp不接受华盛顿特区。:)这是真的。经过一点改变,现在它也喜欢美国人:)那些名字中有数字字符的罕见(但有效)城市呢?@noogrub好吧,在两个字母类中添加
0-9
。那些名字中有数字字符的罕见(但有效)城市呢?@noogrub好吧,将
0-9
添加到两个字母字符类中。