正则表达式是否需要“(”和“)”?

Regex are "(" and ")" necessary?

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

所以如果模式是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)$/"),

作为

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

没有任何损失?

我对NUMER_PATTERNINTEGER_PATTERN特别不确定。我不应该这样做还有其他原因吗(糟糕的编码风格,...)?

是的,字符序列或字符 类 是默认值,它的优先级高于 OR 运算符 |。因此,如果您的序列前面或后面没有任何东西(在 true|false 的案例中清楚显示),那么您不需要它们。

但是,如果您想使用例如this is true|false 对于 "this is true""this is false" 那么优先级对于 "this is false" 将失败并且您需要对 true|false 进行分组,例如使用 non -捕获组,例如this is (?:true|false).

我没有发现您删除了一些括号的表达式有任何问题。但是,如果您想检查它们,只需将它们放入显示优先级(例如 this one)的(在线)检查器中,然后检查结果 "explanation" 是否发生变化。用于正则表达式测试的各种 IDE 插件也有望为您提供类似的 树视图

请注意,您有时会使用边界匹配器(^$),有时则不会。我希望这些要么被使用,要么不被使用。