正则表达式模式中()和[]之间有什么区别?

时间:2010-09-24 17:12:52

标签: regex

在()(括号)中包含正则表达式的一部分与在[](方括号)中执行它之间的区别是什么?

这是怎么回事:

[a-z0-9]

与此不同:

(a-z0-9)

6 个答案:

答案 0 :(得分:38)

[]表示一个字符类。 ()表示捕获组。

[a-z0-9] - 一个字符,其范围为a-z0-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 ,例如aaaabbbbbb等;与此相反,(ab)*匹配任意数量的ab,例如ababababab

[…]character class,用于描述单个字符的选项; [a-z0-9]描述了一个字符,其范围可以是a - z0 - 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)将匹配一个字符 - 任何小写字母或数字。