我经常使用正则表达式进行查找和替换,并且我想尽可能地使用最佳实践。
我理解 the+
和*
characters 之间的区别。reference *
将查找指定短语的所有匹配项,+
并将查找除指定短语的最后一个实例之外的所有匹配项。
话虽如此,当我在互联网上查找正则表达式短语时,我看到很多人在使用+
我认为他们可以使用的地方*
。是使用标准+
而不是*
通用正则表达式短语还是我缺少一些约定?
我认为您对这些字符的含义没有正确的概念。简单的*
意思是匹配指定的前项(通常是单个字符、字符类或带括号的子模式)0 次或多次。这意味着您可以在匹配的字符串中多次出现该项目。
+
除了字符/子模式必须发生 1 次或多次之外,几乎完全相同。
所以区别在于:
* - match 0 or more times
+ - match 1 or more times
没有最佳实践,因为每个都应酌情使用。
您链接到的网站很棒,但是您误解了*
和的定义+
。本质上,*
意思是“零个或多个”,+
意思是“一个或多个”。
换句话说:
X*
意思是“连续任意数量的X
字符,或者可能根本没有。 ”X+
意思是“连续任意数量的X
字符,但至少一个。 ”所以X+
等价于XX*
(甚至X*X
)。它们都有无限的上限,但下限不同。
至于哪个是标准/最佳实践,答案是“都不是”,因为它们都有不同的含义。但是,如果您尝试匹配一项或多项内容,最好X+
使用XX*
. 两者都是正确的,但第一个更短且更具可读性。
正则表达式根据使用的语言而有所不同,但您似乎对*
and使用了错误的定义+
。
*
与{0,}
(零次或多次)
+
相同 与{1,}
(一次或多次)相同
“在通用正则表达式短语上使用 + 而不是 * 的标准是标准,还是我缺少一些约定?”
没有也没有。有些人写的正则表达式不好,有些人不需要区分,有些人做对了。没有什么特别的约定可以遵守。
然而,正如 zzzzBov 所指出的,无论如何,您对 * 和 + 含义的理解似乎都是不正确的。
在标准正则表达式中,+
表示“一个或多个前面的标记”,而*
表示“零个或多个前面的标记”。
[0-9]+
例如,表示“一位或多位数字”。
[0-9]*
另一方面,表示“零个或多个数字”。