Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Regex:combine语句与空字符串_Java_Regex_Whitespace_String - Fatal编程技术网

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”)。这可能会给你错误的答案。