我很难弄清楚我的正则表达式有什么问题,可以是任何长度的字符串,但总是遵循下面的模式
"(A,B)" = valid
"(A,B) (B,C)" = valid
基本上,括号"(", a - z字母,逗号,a - z字母,括号")"空格当且仅当序列再次开始时,否则没有空格。
到目前为止,我已经得到了"^\([A-Z]?,[A-Z]?\)*.\([A-Z]?,[A-Z]?\).*$"
,但我不确定我的正则表达式是不正常工作的。
你可以使用正则表达式,
^(?:s?([A-Z],[A-Z])(?:s([A-Z],[A-Z]))?)*$
演示描述:
^
:断言行起始位置(?:
:非抓包组启动s?
:可选的空白字符(
:字符(
[A-Z]
:字符,A
到Z
,
:字符,
[A-Z]
:字符,A
到Z
)
:字符(
(?:
:非抓包组启动s([A-Z],[A-Z])
: Pattern已经在上面解释了
)
:非捕获组结束?
:使最后一个非捕获组可选
)
:非捕获组结束*
:在0到无限次之间匹配前一个令牌$
:在行末断言位置
一个更好的解决方案(礼貌:第四只鸟):
您也可以选择在第一次匹配后重复n组,即
^([A-Z],[A-Z])(?: ([A-Z],[A-Z]))*$
演示试试这个…
([(]([A-Z]),([A-Z])[)])(s[(]([A-Z]),([A-Z])[)])*
final String regex = "([(]([A-Z])\,([A-Z])[)])(\s[(]([A-Z])\,([A-Z])[)])*";