繁体   English   中英

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

[英]What's the difference between () and [] in regular expression patterns?

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

这是怎么回事

[a-z0-9]

与此不同:

(a-z0-9)

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

[a-z0-9] - 一个在az0-9范围内的字符

(a-z0-9) - 明确捕获a-z0-9 没有范围。

a - 可以被[a-z0-9]捕获。

a-z0-9 - 可以由(a-z0-9)捕获,然后可以在表达式中替换和/或稍后引用。

(…)是一个像数学一样对内容进行分组的组; (a-z0-9)是分组序列a-z0-9 组特别与量词一起使用 ,允许前面的表达式作为一个整体重复: a*b*匹配任意数量的a ,后跟任意数量的b ,例如aaaabbbbbb等; 与此相反, (ab)*匹配任意数量的ab ,例如ababababab等。

[…]是一个描述单个字符选项的字符类 ; [a-z0-9]描述了一个单独的字符,可以是该范围的a - z0 - 9

正则表达式中的[]构造基本上是|简写 关于所有内容。 例如[abc]匹配a,b或c。 另外, -字符在[]内部具有特殊含义。 它提供了范围构造。 正则表达式[az]将匹配任何字母a到z。

()构造是一个建立优先顺序的分组构造(它对访问匹配的子串也有影响,但这更像是一个高级主题)。 正则表达式(abc)将匹配字符串“abc”。

[a-z0-9]将匹配任何小写字母或数字。 (a-z0-9)将匹配确切的字符串"a-z0-9"并允许另外两件事:你可以应用像*?这样的修饰符 +到整个组,您可以在匹配后使用$1\\1引用此匹配。 但是,对你的例子没用。

尝试([a-z0-9])捕获小写字母和数字的混合字符串,以及捕获后引用(或提取)。

[a-z0-9]将匹配abcdefghijklmnopqrstuvwxyz0123456789中的一个。 换句话说,方括号恰好匹配一个字符。

(a-z0-9)将匹配两个字符,第一个是abcdefghijklmnopqrstuvwxyz ,第二个是0123456789 ,就好像括号不在那里一样。 ()将允许您准确读取匹配的字符。 括号也可用于使用bar |对两个表达式进行OR运算 字符。 例如, (az|0-9)将匹配一个字符 - 任何小写字母或数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM