Java正则词边界

Java正则词边界,java,regex,Java,Regex,我想创建正则表达式,它将用空格和破折号匹配第二个名称,如: Smith-Wright Smith Smith Wright 但是,如果您要输入just-or-whitespace,则它不应该起作用。目前,我有一个类似于^[a-zA-Z\s\-]+$的正则表达式,但它只监视带-和空格的单词。如何创建只与“我的分隔符”匹配的正则表达式?您可以将此正则表达式用于要匹配的名称 ^[a-zA-Z]+(?:[ -][a-zA-Z]+)*$ 说明: ^-字符串的开头 [a-zA-Z]+匹配由一个或多个字

我想创建正则表达式,它将用空格和破折号匹配第二个名称,如:

Smith-Wright
Smith
Smith Wright

但是,如果您要输入just-or-whitespace,则它不应该起作用。目前,我有一个类似于
^[a-zA-Z\s\-]+$
的正则表达式,但它只监视带-和空格的单词。如何创建只与“我的分隔符”匹配的正则表达式?

您可以将此正则表达式用于要匹配的名称

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

  • ^
    -字符串的开头
  • [a-zA-Z]+
    匹配由一个或多个字母组成的名称
  • (?:[-][a-zA-Z]+)*
    -另外,如果名称部分是空格或连字符分隔的,则匹配更多名称部分
  • $
    -字符串结尾

如果我正确理解了您的帖子,您希望匹配:

  • “史密斯·赖特”
  • “史密斯”
  • “史密斯·赖特”
但不是

  • “——”
  • “”
  • “-赖特”
  • “赖特”
如果正确,您可以使用:

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

您可以将分隔符放置在
[-]
的位置

但不仅仅是“史密斯”。我应该添加什么来匹配此项?如果您只想匹配
Smith
,只需将最后一个
+
更改为
*
,这将使后面的部分为零或更多,因此是可选的