Regexp:这4个表达式之间的区别是什么

时间:2016-03-10 07:02:18

标签: regex

尝试学习regexp但对语法感到困惑。这些不同的表达方式有何不同? :

([A-Z]){3}
([A-Z]{3})
[A-Z]{3}
[A-Z]\3 edit: meant ([A-Z])\3

2 个答案:

答案 0 :(得分:2)

  • ([A-Z]){3} - 匹配3个大写字母,将有3个组
  • ([A-Z]{3}) - 将3个大写字母与一个组匹配
  • [A-Z]{3} - 匹配3个大写字母,不分组
  • [A-Z]\3 - 在大多数语言中应该是无效的正则表达式(匹配一个大写字母和一个反向引用到第3组),例如([A-Z])([A-Z])([A-Z])\3将匹配2个大写字母和另外两次出现的大写字母

答案 1 :(得分:2)

([A-Z]){3} - 这匹配三个捕获组,每个捕获组包含来自A-Z

的字母

([A-Z]{3}) - 这与上面相同,但是它将所有三个字母都包含在一个捕获组中

[A-Z]{3} - 这与A-Z的字母匹配三次,没有捕获组

[A-Z]\3 - 这匹配来自A-Z的单个字符,后跟\3(至少在Java中)

你可能想知道什么是“捕获组”。这是一种跟踪在评估正则表达式过程中匹配的事物的方法。例如,考虑你的第一个正则表达式:

([A-Z]){3}

相当于

([A-Z])([A-Z])([A-Z])

如果您评估此正则表达式,那么,在Java中,您可以使用变量$1$2$3访问三个匹配的字母中的每一个。