尝试学习regexp但对语法感到困惑。这些不同的表达方式有何不同? :
([A-Z]){3}
([A-Z]{3})
[A-Z]{3}
[A-Z]\3 edit: meant ([A-Z])\3
答案 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
访问三个匹配的字母中的每一个。