正则表达式在[]中使用()的问题

其实我是想问在使用 [] 的时候,[] 里的内容怎么看成一个群组,因为在 [] 里使用()的时候,()好像没起作用。

看下面的例子:
我有一个子符串的为 "abcdef"
然后我的正则是 /[^(ac)]/
匹配结果为 b def
其实我是想匹配非“ac”的字符,而不是想匹配非“a”或非“c”的字符,我应该怎么做呢??
有看明白,会回答的同学帮忙一下哈!
PS:什么编程语言都可以,因为什么语言的正则原理都是一样的

[]里除了-^[]外的所有元素都会被当成普通字符,[^(ac)]的意思是除了ac()这四个字符以外的其他任意一个字符。在[]里是没办法使用分组的。

你要知道,“字符”这个词指的是单个的元素,“ac”是字符串,不是字符,而[]中的所有元素都是互相并列,没有顺序的。
你如果想匹配除了连续的ac之外的其他所有内容,应该用
/(?:(?!ac).(?<!ac))+/
简单方法是用ac来split追问

好吧,好像没其他人回答了,那你能不能再告诉我一下
?: ?= ?!
是怎样用的,你的正则我表示没看懂,麻烦了

追答

我可以简单的告诉你(?:)是非捕获组,括号中的内容不会捕获。(?=)(?!)(?<=)(?<!)都是环视,(?!ac)的意思是当前位置右面不是ac,(?<!ac)的意思是当前位置左面不是ac。

环视是比较高级的特性,你[]都没有掌握,所以我不鼓励你去学习,你要想学习的话就先把基础打好。
而且如果前面的解释没有看懂的话,这也是正常的,因为对不会正则的人来说,本来就不是很好理解。
你这个问题说来也简单,其实就是想找到ac,然后其他部分就是你想要的,说白了就是用ac来split。只不过你使用[]这个思路是错误的。

如果你不知道非捕获分组和环视的用法,建议你去看详细的教程。在这回答你肯定不如教程详细,如果你有具体的问题可以问我,但是“怎么用”这种问题还是去看教程的好。

追问

感谢,加分!!

温馨提示:内容为网友见解,仅供参考
无其他回答

正则表达式在[]中使用()的问题
简单方法是用ac来split

正则表达式问题
用中括号 [ ] 包含多个字符,可以匹配所包含的字符中的任意一个。同样,每次只能匹配其中一个。用中括号 [^ ] 包含多个字符,构成否定格式,可以匹配所包含的字符之外的任意一个字符。说明 正则表达式中的特殊符号,如果被包含于中括号中,则失去特殊意义,但 \\ [ ] : ^ - 除外。标准字符集合,除...

PHP的正则表达式中使用中文(并匹配中文)的问题,原串为UTF8
preg2 = "\/中国\/sim" ;preg_match_all($preg2, $str, $strResult, PREG_PATTERN_ORDER);print_r($strResult);?> 我的PHP文件是UTF-8编码,不知道你的$str是从哪里得到的呢?像上面一样,我直接给$str赋值,这样使用 \/中国\/sim 这个表达式没有任何问题,会不会是你$str字符串的编码与页面...

关于正则表达式中的(?:)问题
()的意思有两个,一个有的书上叫记忆,就是把匹配的字符保存在寄存器里,以备后用,另一个意思是分组,所以()又叫记忆分组。而(?:)只有分组的功能,分组的意思是把组内的部分看成是同一个对象对待,比如一个字符串,经常用来分割并列逻辑(就是'|')。所以分组符号只是不把匹配内容放到寄存器里,...

请问正则表达式匹配括号的问题
在正则表达式中()表示一个分组,()属于正则表达式的特殊字符,是具有实际意义的,所以要匹配括号必须要加上 反斜杠 \\( 来说明这表示的是一个普通的小括号,而不是一个正则分组

...英文字母、数字、连接号和下划线的正则表达式中的疑问
这里有两个问题需要先搞清楚,首先,用\\w实现汉字的匹配是受你的操作系统和语言环境影响的,大部分语言环境下\\w相当于[A-Za-z0-9_],也就是仅匹配任意一个字母或数字或下划线。其次,“[]”括起来的形式在正则中表示字符集合,字符集中只有4个 字符具有特殊含义:“]”代表字符集定义的结束;“\\...

请问下正则表达式中 (?:) 的用法
(?:)表示不捕获这个分组 说明一下正则表达式中圆括号中的内容表示分组,从左到右按左圆括号'('的顺序依次为分组1,2...,9 当使用(?:)表示此圆括号中的内容不计入以上1,2...9的捕获分组中

关于正则表达式的逗号匹配的问题
用这个吧:\\w+? \\d{1,2},\\d{4},问号后面有空格 如果不要逗号,可以这样:(\\w+? \\d{1,2}),(\\d{4}),取匹配子文本1和2,就可以了 你的 [a-z]+\\s [0-9]{2},[0-9]{4},前面的 [a-z]+,没有包括大写和数字;[0-9]{2},匹配两次,一个数字的不匹配;式中的逗号是...

正则表达式在js中的用法问题
就是正则表达式的问题 str = str.replace("\\b" + s+ "\\b","A "+s);你要写成匹配时是以空格开始才行,也就是字母开头不匹配,否则就会出现away中的way也被替换掉的情况,可以试试这个正则\/\\b[^a-zA-Z]str\\b\/.

正则表达式 \\[(.*?)\\] 如何解释
.*是贪婪匹配,也就是说你第1个出现"["的地方,和最后一个出现"]"的地方 .*?是惰性匹配,也就是说第1个出现"["的地方,和跟着最近的出现"]"的地方

相似回答
大家正在搜