Java Regex:combine语句与空字符串
我想做的是:这个正则表达式应该强制第一个字符是字母,在该字符之后,可以插入字母、空格或“-” 第一部分很好:Java Regex:combine语句与空字符串,java,regex,whitespace,string,Java,Regex,Whitespace,String,我想做的是:这个正则表达式应该强制第一个字符是字母,在该字符之后,可以插入字母、空格或“-” 第一部分很好:(^[A-Za-z][A-Za-z-]*$) 然后我还想允许一个空字符串:(^$) 但是,当我将两者结合起来时,用户可以用空格开始字符串。我做错了什么? 塔克斯 (^[A-Za-z][A-Za-z-]*$)| |(^$) (我不知道是否需要此信息,但我在Java中使用此信息,作为从InputVerifier扩展而来的类的一部分,在JTextFields上设置验证器)此信息应满足您的需要:
(^[A-Za-z][A-Za-z-]*$)
然后我还想允许一个空字符串:(^$)
但是,当我将两者结合起来时,用户可以用空格开始字符串。我做错了什么?
塔克斯
(^[A-Za-z][A-Za-z-]*$)| |(^$)
(我不知道是否需要此信息,但我在Java中使用此信息,作为从InputVerifier扩展而来的类的一部分,在JTextFields上设置验证器)此信息应满足您的需要:
^([A-Za-z][A-Za-z-]*|)$
正则表达式中的
或只需要一个|
,而经典的JAVA(除其他语言外)需要两个|
这一个应该适合您的需要:
^([A-Za-z][A-Za-z-]*|)$
正则表达式中的或
只需要一个
,而经典的JAVA(除其他语言外)需要两个|
以下操作即可:
^([A-Za-z][A-Za-z -]*)?$
?
使括号内的表达式成为可选表达式
原始正则表达式不太正确的原因是|
。regex“or”运算符是单个|
。现在考虑<代码> x> y < /代码>。这与x
或空字符串或y
匹配。由于空字符串未以任何方式锚定,因此将在任何输入中找到至少一个空字符串实例。以下操作应能完成此操作:
^([A-Za-z][A-Za-z -]*)?$
?
使括号内的表达式成为可选表达式
原始正则表达式不太正确的原因是|
。regex“or”运算符是单个|
。现在考虑<代码> x> y < /代码>。这与x
或空字符串或y
匹配。由于空字符串没有以任何方式锚定,因此将在任何输入中找到它的至少一个实例。Ah!没想到会这样+1 ;)@波希米亚人是的,尝试”。匹配(^([A-Za-z][A-Za-z-]*.*)$”
,它返回true
@Bohemian。。事实上是这样的。Java也有一个管道|
或操作符。thx伙计们,但为什么我仍然可以从空白开始呢?啊!没想到会这样+1 ;)@波希米亚人是的,尝试”。匹配(^([A-Za-z][A-Za-z-]*.*)$”
,它返回true
@Bohemian。。实际上是这样的。Java也有一个管道|
或操作符。thx伙计们,但为什么我仍然可以用空格开头呢?我不理解你的上一句话。你的意思是:-x | | y
甚至会匹配一个空格,事实上,任何输入都会匹配?但即使使用这种模式,我也可以以空字符开头。。也许这与Swing中的InputVerifier的工作方式有关?@RohitJain:它绝对会匹配任何东西。@Rps:可能与您的代码有关,而不是与正则表达式本身有关。@NPE。。恐怕这不是真的。它将只匹配x
、y
或空字符串。尝试使用:-“”.matches(“x | | y”)代码>。这可能会给你错误的答案。我不明白你的上一句话。你的意思是:-x | | y
甚至会匹配一个空格,事实上,任何输入都会匹配?但即使使用这种模式,我也可以以空字符开头。。也许这与Swing中的InputVerifier的工作方式有关?@RohitJain:它绝对会匹配任何东西。@Rps:可能与您的代码有关,而不是与正则表达式本身有关。@NPE。。恐怕这不是真的。它将只匹配x
、y
或空字符串。尝试使用:-“”.matches(“x | | y”)代码>。这可能会给你错误的答案。