正则表达式中() [] {}的区别用法
作者&投稿:比注 (若有异议请与网页底部的电邮联系)
方括号是单个匹配 字符集/排除字符集/命名字符集
正文内容
正则表达式的() [] {} 有着不同的意思。
() 是为了提取匹配字符串的,表达式中有几个()就有几个相应的匹配字符串
(\s*)表示连续空格的字符串
[] 是定义匹配的字符范围。比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符和数字。[\s*表示空格或者*号]
{}一般是用来匹配的长度。比如\s{3}表示匹配三个空格,\s[1,3]表示匹配1到3个空格
(0-9)匹配'0-9'本身。[0-9]*匹配数字(注意后面有*,可以为空)[0-9]+匹配数字(注意后面有+,不可以为空),
{0-9}写法是错误的
[0-9]{0,9}表示长度为0到9的数字字符串。
回到顶部
圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理
示例:
1(abc|bcd|cde),表示这一段是abc、bcd、cde三者之一,顺序也必须一致
2、(abc)? 表示这一组要么一起出现,要么不出现,出现那则按顺序出现
3、(?:abc)表示找到一样abc的一组,但是不记录,不保存到变量中,否则可以通过变量中,否则可以通过x取第几个括号所匹配道德项
,比如:
(aaa)(bbb)(ccc)(?:ddd)(eee)可以用1获取(aaa)匹配到的内容,而1获取(aaa)匹配到的内容,而3则获取到了(ccc)匹配到的内容,而$4则获取的是由(eee)
匹配到的内容,因为前一对括号没有保存变量
4.a(?=bbb)顺序环视 表示a后面必须紧跟3个连续的b
5、(?i:xxxx)不区分大小写 (?s:.*)跨行匹配,可以匹配回车符
回到顶部
方括号是单个匹配 字符集/排除字符集/命名字符集
示例:
1、[0-3],表示找到一个位置上的字符只能是0到3折四个数字,与(abc|bcd|cde)的作用比较类似,但圆括号可以匹配多个连续的字符
而一对方括号只能匹配单个字符
2、[^0-3] 表示找到这个位置上字符只能是除了0到3之外的所有字符
3、[:digit:] 0-9 [:alnum] A-Za-z0-9
()和[]有本质的区别
()内的内容表示的是一个表达式,()本身不匹配任何东西,也不惜那是匹配任何东西,只是把括号内的内容作为
同一个表达式来处理,例如(ab){1,3},就表示ab一起连续出现最少1次,最多三次。如果没有括号的话,ab{1,3},
就表示a 后面紧跟的b出现的最少一次,最多三次。另外,括号在匹配模式中也跟重要。这个就不延伸了。
[]表示匹配字符在[]中,兵出现一次,并且reshuffle字符写在[]会被当成普通字符来匹配,例如[(a)],会匹配(、a、)、这三个字符。
所以()[] 无论是作用还是表示的含义。都有天壤之别,没有什么联系。
正彦安奇: 一、两种表达方式表达意义的区别: 1、\s代表正则表达式中的一个空白字符(可能是空格、制表符、其他空白). 2、\\s代表字符\和字符s,因为\在正则中有特殊意义,所有需要转义,写成了\\ . 二、表达的作用的区别: 1、\s用于匹配空白字...
图们市19728405701: 正则表达式中方括号[]与圆括号()的区别是什么? - ?
正彦安奇: [] 无意义,一般用作匹配一个集合 比如 [0-9] :查找任何从 0 至 9 的数字.[a-Z] :查找任何从小写 a 到大写 Z 的字符.()也是匹配一个集合,但它还可以用作反向引用.
图们市19728405701: 正则表达式中 - ? 和. - ?这两者有什么区别?请举例解释一下,谢谢! - ?
正彦安奇: 1、-?-?能匹配一个-或者空值(0个-) 在这里的英文杠-没有特殊的含义,他就代表他本身,这里就是他本意.在这里英文?代表重复次数0次或一次,?前面必须有一个能代表具体字符的表达式,这里是字符本身-.-?也就是匹配-1次或0次.?如果在+*{}后面,代表取最短匹配,书面语言叫做非贪婪匹配,这时候没有?,是就是贪婪匹配,就会匹配最长的值.2、.-?能匹配任意一个字符加一个-或者0个- 在这里英文点没有在方括号[]里,就是代表除换行\n、回车\t以外的任意字符,可以是空格.否则代表.本身.-本身不代表次数,所有.只匹配一个字符
图们市19728405701: 正则表达式中 \b 和 \B 有什么区别啊?看英文版教程看的不是很清楚,谁能给我举例解释下,谢谢! - ?
正彦安奇: \b表示单词的开头或结尾的位置 \B表示不是单词开头和结尾的位置 ...-_-!修改回答的时候不小心把原来的删没了. 总之,边沿位置是一个“位置”,不占任何字符空间,\b和\B的区别就是判断这个位置的前后字符“属性是否一致”.具体使用最好看看实例,\b是很常用的
图们市19728405701: 两个正则表达式的区别在哪里??
正彦安奇: 你写的这个形式本身就是有问题的 ?!abc 这个属于 零宽负向先行断言,你写在最前面有什么作用呢? 而且这个本身就是一个占位符,不需要再前面加上\b这样的东子 你这两个我理解应该如下修改 1.((?<!abc)\w)+\b 2.\b(\w+(?!abc)) 另外你到底想写什么意思的表达式?
图们市19728405701: 正则表达式中 ' - ' 和 [ - ],有什么区别? - ?
正彦安奇: 最基本的意思:小括号就是括号内看成一个整体 ,中括号就是匹配括号内的其中一个,大括号就是匹配几次 但是括号里变加上其他字符就有不同意思 详细介绍 例如: {n} n是一个非负整数.匹配确定的n次.例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o. {n,} n是一个非负整数.至少匹配n次.例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o.“o{1,}”等价于“o+”.“o{0,}”则等价于“o*”. {n,m} m和n均为非负整数,其中n
图们市19728405701: 正则表达式中的()和[]有什么区别 - ?
正彦安奇: \w表示匹配数字、字母、和下划线的一个字符,\w和[\w]没有任何区别 (\w)表示分组,会将捕获到的字符记录下来,可以再拿出来使用 例如\w[a-z]表示能匹配一个西瓜,\w能匹配西瓜皮,[a-z]能匹配西瓜瓤,两个组起来匹配西瓜,如果这时候你想不仅找出这个西瓜,而且要使用西瓜皮和西瓜瓤的内容,那么你就需要括号来捕获分组,(\w)([a-z]),通过$1就可以拿出西瓜皮,通过$2就可以拿出西瓜瓤,当然是要配合编程语句来使用的,如java 等,希望你能理解
图们市19728405701: 正则表达式 (.*) .* 就是这2种写法,有什么却别?分别代表什么含义? - ?
正彦安奇: .* 代表的是通配符 外边有括号的和不写括号区别在于括号的用法 在正则表达式中 ()表示模式单元 当()的正则式匹配时 可以通过调用模式单元的方法调用匹配的内容 用//1 这种格式 调用
图们市19728405701: 正则表达式中的()[]{}这三种括号一般有什么区别? - ?
正彦安奇: ()这种括号,会分配存储空间,可以用$1取得里面的数据 []用来自定义能够匹配 '多种字符' 的表达式.比如[mike]匹配,m,i,k,e,这4个字母,这里注意是单个字符不能匹配一个单词mike,如果要匹配一个单词可以这样写(mike),如果不需要分配存储空间可以直接写mike. {}修饰匹配次数的符号.a{0,1}a至少出现0次或最多1次,第二次出现则不匹配了a{2,5}a至少出现2次或最多5次. 希望你能理解!
图们市19728405701: 求大神解答:正则表达式.*?与(.*?)有什么区别 - ?
正彦安奇: ()中的内容会作为捕获组的匹配结果.使用与不使用捕获组至少有下列区别:1.捕获组是一个整体,如(a.)*表示匹配字母a和任意字符的组合若干次,而a.*表示匹配一个字母a和若干个任意字符.同时,如果既想分组又不想参与捕获可以使用非捕获组:(?:a.)*2.re.findall()方法只会返回所有捕获组的列表3.match对象的group()方法可以返回捕获组,如group(1)返回第1捕获组的内容,group(2)返回第2捕获组的内容,甚至支持命名捕获组如group('path')4.捕获组匹配的内容可作为反向引用使用,如\1表示此处应匹配第1捕获组捕获到的内容.