正则表达式+ vs *。标准是什么?

时间:2013-08-19 16:27:03

标签: regex

我使用正则表达式进行查找和替换,我希望尽可能使用最佳实践。

我理解+*字符之间的区别。 reference *会找到指定词组的所有匹配项,+将找到除指定词组的最后一个实例以外的所有匹配项。

话虽这么说,当我在互联网上查找正则表达式短语时,我看到很多人使用+我觉得他们可以使用*。标准是在通用正则表达式短语上使用+而不是*,还是有一些我缺少的约定?

5 个答案:

答案 0 :(得分:3)

我认为你对这些角色的含义没有正确的概念。 *只是意味着匹配指定的前一项(通常是单个字符,字符类或带括号的子模式)0次或更多次。这意味着您可以在匹配的字符串中出现该项目的任意数量。

除了字符/子模式必须发生一次或多次之外,

+几乎完全相同。

所以区别在于:

* - match 0 or more times
+ - match 1 or more times

没有最佳做法,因为每个都应该适当使用。

答案 1 :(得分:2)

您链接的网站很棒,但您误解了*+的定义。基本上,*表示“零或更多”,+表示“一个或多个”。

换句话说:

  • X*表示“连续数字X个字符,或者根本不存在。
  • X+表示“一行中有X个字符,但至少有一个。

因此X+相当于XX*(甚至X*X)。它们都有无限的上限,但下限不同。

至于哪一个是标准/最佳实践,答案是“既不”,因为它们都有不同的含义。但是,如果您尝试匹配某个或多个内容,最好使用X+而不是XX*。两者都是正确的,但第一个更短,更易读。

答案 2 :(得分:0)

正则表达式根据其使用的语言而有所不同,但您似乎使用了*+的错误定义。

*{0,}相同(零次或多次)
+{1,}(一次或多次)相同

答案 3 :(得分:0)

“在通用正则表达式短语上使用+而不是*是标准还是我缺少一些惯例?”

不,不。有些人写错了正则表达式,有些人不需要区分,有些人说得对。没有特别的约定要遵守。

正如zzzzBov指出的那样,无论如何,你对*和+意味着什么的理解似乎都是错误的。

答案 4 :(得分:0)

在标准正则表达式中,+表示“前面一个或多个令牌”,而*表示“前面一个或多个令牌”。

例如,

[0-9]+表示“一个或多个数字”。

另一方面,

[0-9]*表示“零或更多数字”。