Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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/4/regex/17.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正则表达式:`+;| `及`*`_Java_Regex - Fatal编程技术网

Java正则表达式:`+;| `及`*`

Java正则表达式:`+;| `及`*`,java,regex,Java,Regex,我跳进了一个自定义输入验证库的现有代码库,该库使用regex模式(以及其他东西) 以下是一个例子: final String pattern=“^[a-zA-Z]+|$”; 在我看来,+|(“至少1,或空”)只是一种令人困惑的方式,可以实现与*(“0或更多”)的等价: final String pattern=“^[a-zA-Z]*$”; 我错过什么了吗?使用+|是否可能会提高性能 人们宁愿使用+|的潜在原因是什么? 编辑:因为我测试了评论中提供的答案是否正确,下面是结果的屏幕截图: ^[

我跳进了一个自定义输入验证库的现有代码库,该库使用regex模式(以及其他东西)

以下是一个例子:

final String pattern=“^[a-zA-Z]+|$”;
在我看来,
+|
(“至少1,或空”)只是一种令人困惑的方式,可以实现与
*
(“0或更多”)的等价:

final String pattern=“^[a-zA-Z]*$”;
我错过什么了吗?使用
+|
是否可能会提高性能

人们宁愿使用
+|
的潜在原因是什么?


编辑:因为我测试了评论中提供的答案是否正确,下面是结果的屏幕截图:


^[a-zA-Z]+$
匹配字符串开头的一个或多个字母,或者匹配字符串结尾。它与等价性无关
^([a-zA-Z]+|$
等于
^([a-zA-Z]*)$
@WiktorStribiżew所以你说
^[a-zA-Z]+|$
等同于
(^[a-zA-Z]+)|($)
?这意味着“
a9001
”将匹配该模式,因为字符串的开头确实至少有一个组中指定的字符。很有趣,谢谢你为我澄清这一点!我认为这实际上可能是我们的一些测试失败的原因。在Java中,有两种执行正则表达式的方法:
find()
matches()
。Wiktor Stribiżew的评论假设使用了
find()
,它在输入中搜索符合正则表达式的子字符串。后续测试代码使用
matches()
,它尝试将整个输入匹配到正则表达式,使得
^
$
冗余,这就是为什么要假设
find()
matches()
与regex
X
类似于
find()
与regex
^(X)$
,或者更准确地说,与regex
\A(?:X)\z
匹配。除非另有规定,否则regex被假定为在“查找”模式下执行,这就是为什么如果要匹配整个输入,就需要在那里执行
^
$/code>。许多语言只支持“查找”模式,例如,没有与
matches()
调用等效的模式。@Andreas感谢您的精确性!因此,如果库实际在内部使用
matches()
,我可以删除
^
$