Regex是否需要“(”和“)”?

问题描述 投票:0回答:1

如果图案由多个组组成,我是否只需要使用()

因此,如果模式为true|false,则是否添加括号都没关系,对吗?再说一次,如果模式为POINT_PATTERN("\\((\\d+),(\\d+)\\)")则确实有所不同,因为我想从中获取两个不同的值。

我可以写出我当前的模式吗:

NUMBER_PATTERN("(?!(0[0-9]))[0-9]+"),
BOOLEAN_PATTERN("(true|false)"),
STRING_PATTERN("(\\w+)"),
INTEGER_PATTERN("/^([+-]?[1-9]\\d*|0)$/"),

as

NUMBER_PATTERN("(?!0[0-9])[0-9]+"),
BOOLEAN_PATTERN("true|false"),
STRING_PATTERN("\\w+"),
INTEGER_PATTERN("^[+-]?[1-9]\\d*|0$");

没有任何损失?

我对NUMER_PATTERNINTEGER_PATTERN尤其不确定。还有其他原因为什么我不应该这样做(不良的编码风格,...)?

java regex matcher
1个回答
2
投票

是,默认为字符或字符类序列,它的优先级高于OR运算符|。因此,如果序列的前面或后面没有任何内容(在true|false的情况下清楚显示),则不需要它们。

但是,如果您想使用this is true|false"this is true""this is false"优先级将对"this is false"失败,因此您需要对true|false进行分组,例如使用non-captureing组,例如this is (?:true|false)

我看不到您删除了一些括号的表达式的任何问题。但是,如果要检查它们,则只需将它们放入显示优先级的(在线)检查器中即可(例如this one),然后检查结果“说明”是否发生了变化。希望用于regexp测试的各种IDE插件也可以为您提供类似的tree view

[请注意,您有时使用边界匹配器(^$),但有时没有。我希望这些将被使用或不被使用。

© www.soinside.com 2019 - 2024. All rights reserved.