在()(括号)中包含正则表达式的一部分与在[](方括号)中执行它之间的区别是什么?
这是怎么回事:
[a-z0-9]
与此不同:
(a-z0-9)
答案 0 :(得分:38)
[]
表示一个字符类。 ()
表示捕获组。
[a-z0-9]
- 一个字符,其范围为a-z
或0-9
(a-z0-9)
- 明确捕获a-z0-9
。没有范围。
a
- 可以[a-z0-9]
抓取。
a-z0-9
- 可以由(a-z0-9)
捕获,然后可以在替换中和/或稍后的表达式中引用。
答案 1 :(得分:14)
(…)
是一个group,用于对数据中的内容进行分组; (a-z0-9)
是a-z0-9
的分组序列。群组特别与quantifiers一起使用,允许前面的表达式作为一个整体重复:a*b*
匹配任意数量的a
,后跟任意数量的b
,例如a
,aaab
,bbbbb
等;与此相反,(ab)*
匹配任意数量的ab
,例如ab
,abababab
等
[…]
是character class,用于描述单个字符的选项; [a-z0-9]
描述了一个字符,其范围可以是a
- z
或0
- 9
。
答案 2 :(得分:11)
正则表达式中的[]
构造基本上是所有内容上|
的简写。例如,[abc]
匹配a,b或c。此外,-
字符在[]
内具有特殊含义。它提供了范围构造。正则表达式[a-z]
将匹配任何字母a到z。
()
构造是一个建立优先顺序的分组构造(它对访问匹配的子串也有影响,但这更像是一个高级主题)。正则表达式(abc)
将匹配字符串“abc”。
答案 3 :(得分:5)
[a-z0-9]
将匹配任何小写字母或数字。 (a-z0-9)
将与确切的字符串"a-z0-9"
匹配,并允许另外两件事:您可以将*
和?
以及+
等修饰符应用于整个组,并且您可以在与$1
或\1
匹配后引用此匹配。但是,对你的例子没用。
答案 4 :(得分:0)
尝试([a-z0-9])捕获小写字母和数字的混合字符串,以及捕获后引用(或提取)。
答案 5 :(得分:-1)
[a-z0-9]
将匹配abcdefghijklmnopqrstuvwxyz0123456789
中的一个。换句话说,方括号只匹配一个字符。
(a-z0-9)
将匹配两个字符,第一个是abcdefghijklmnopqrstuvwxyz
中的一个,第二个是0123456789
中的一个,就像括号不在那里一样。 ()将允许您准确读取匹配的字符。括号对于使用条|
字符对两个表达式进行OR运算也很有用。例如,(a-z|0-9)
将匹配一个字符 - 任何小写字母或数字。