正则表达式如何匹配字符串中的所有()之间的字符串。

如:字符串abc(@a)defghi(@b)aaaaa,如何获取所有()中间的字符串?

第1个回答  推荐于2016-02-26
哎、这个测试好久!在perl里面简直机关重重啊、看结果:
[u@H /billing/user/xufc/pp]$perl
my $line='abc(@a)defghi(@b)aaaaa'; #要用单引号、双引号perl就先给你认为括号里面为空
my @array=($line =~ m/\((.*?)\)/g) ; #语法叫“列表上下文中的m//”,匹配(XX),然后提取出XX
print "@array\n"; #输入完成后、按ctrl+D代表程序结束
@a @b #输出的结果
[u@H /billing/user/xufc/pp]$

这个是perl里面的,其它语言不知道怎么用追问

不知那个 ~m 怎么理解,我把后面的部分——/\((.*?)\)/g试了下,发现还是上面答案一样的问题,大概真的是flex自己的问题吧,我在网上也看了一些别的例子,基本上都是会出现这个问题,我试着自己组了一下表达式,也不行……哎……

不过还是谢谢啦!~

追答

~m、这个不是这样的,=~,这个符号代表匹配;后面的m/\((.*?)\)/g,m//这个叫做模式、m是个简称可以不写的、直接用//;

发现还是上面答案一样的问题?这个有问题吗,不是结果正确的啊!

追问

哦,我没接触过perl,不知道那个是匹配,见笑了~
前面都去掉的话,剩下的不就是 /\((.*?)\)/g 了吗?我刚才试的就是这个式子

追答

是的、用
@a @b #输出的结果,如故用perl 这个输出的结果就是你想要的;flex可能不支持这种正则表达式

本回答被提问者和网友采纳
第2个回答  2012-09-26
"(?<=\()[^()]+(?=\))"追问

这个式子我知道,但是只能找到一个,而且中间()需要加转义字符吧……
我用的flex,在表达式后面加g再match的话——(?<=\()[^\(\)]+(?=\))/g ,会出现读取两次第一个()中内容的情况,不知道哪里出了错,请帮忙啊~

追答

有的正则引擎不支持(?<
可能是这种原因吧
我没用过flex
有没有
这种 "\(([^()]+)\)"
取Group1的试一下

追问

我试了"\(([^()]+)\)"这个,不过也不行,还是会出现读取两次第一个()中内容的情况,而且我发现你给的第一个式子跟这个效果一样,也就是说中间的转义字符加不加皆可,难道说我理解错了,那并不是个转义字符?还是中间根本就没起作用?

追答

由于没用过flex
所以这个问题我解决不了了

第3个回答  推荐于2018-05-10
[u@H /billing/user/xufc/pp]$perl
my $line='abc(@a)defghi(@b)aaaaa'; #要用单引号、双引号perl就先给你认为括号里面为空
my @array=($line =~ m/\((.*?)\)/g) ; #语法叫“列表上下文中的m//”,匹配(XX),然后提取出XX
print "@array\n"; #输入完成后、按ctrl+D代表程序结束
@a @b #输出的结果
[u@H /billing/user/xufc/pp]$

这个是perl里面的,其它语言不知道怎么用

python 正则表达式,怎么从字符串中匹配成组的所有结果?
匹配所有结果的python程序如下(注意图中源代码的缩进)import re a="lege.teeth34eatedecdeath#e0t~"regex='(.)e(.)t(.)'result=[]for i in range(len(a)-4):b=a[i:i+5]obj=re.match(regex,b)if obj:result.append((obj.group(1),obj.group(2),obj.group(3)))print(result)

正则表达式怎么取一个字符串里的所有字符
1.表达式内固定内容的字符串能不写尽量不写,能简写的尽量简化来写(如前面写的abc部分不能写死)2.可以少量使用前瞻(正向),后瞻(反向)基本不学,学了还要研究那些浏览器支持,不敢用,太多了也学不动。3.NoJS(Not Only JavaScript);不仅仅是浏览器中的js;不过js的正则\/exp\/字面量写法简...

正则匹配两个方括号之间的内容,包括方括号本身要匹配字符串[baidu...
应该用正则表达式:\/\\[baidu\\][\\s\\S]*?\\[\\\/baidu\\]\/i 取第0捕获组的数据,就是字符串[baidu] ... [\/baidu]的所有内容 你的正则表达式\/\\[baidu\\]([\\s\\S]*)\\[\\\/baidu\\]\/Ui如果有两个[\/baidu],它就会匹配最长的字符串(贪婪匹配),比如字符串:[baidu] ... [\/baidu][baidu] .....

在UltraEdit中使用正则表达式
Tip 1: 如何去掉所编辑文本中包含特定字符串的行? 这则技巧是在UltraEdit的帮助文件里提到.CTRL+R 调出来替换(Replace)窗口,选中"使用正则表达式";然后用查找 %*你的字符串*^p 替换成空内容即可.如,我当前有个文本文件,需要去掉所有包含 http:\/\/www.baidu.net\/ 这个字符串的行,查找%*http:\/\/www.baidu.net...

匹配指定字符之后的所有字符串的正则表达式
想匹配" - 百度知道"的正则表达式:-.*$ 或者正则表达式:- 百度知道

js正则表达式怎么取出个字符串中的所有数字?
对于字符s,利用正则匹配 :var num = s.replace(\/[^0-9]\/ig, "")。js正则表达式语法:正则表达式有两种形式,一种是普通方式,一种是构造函数方式。普通方式:var reg=\/表达式\/附加参数表达式:一个字符串,代表了某种规则,其中可以使用某些特殊字符,来代表特殊的规则,后面会详细说明。附加参数...

...匹配以某字符串开始以某字符串结束的字符串中的字符?
a = a.replace(\/(file\\:\\\/\\\/\\\/[^\\\/]*)\\\/(.*\\")\/, "$1\\\\$2");这样可以替换file:\/\/\/开头,以"结尾的字符串中的所有\/符号了,由于要匹配file:\/\/\/开头,以"结尾, 正则中必须在开始加上file\\:\\\/\\\/\\\/ 结尾加上\\".而加上了这,replace方法的时候就算正则加上g,也是只替换一次了....

正则表达式提取两个字符之间的字符串
注意最前面有一个空格。你要的东西在第一个分组里。PS.你会在java里用正则获取第一个分组吧?下面是一个例子(部分),subjectString是“我 实在 不知道 该 怎么办\/end\/ 了”所在的字符串。List<String> matchList = new ArrayList<String>();try {Pattern regex = Pattern.compile(" ([^ ]+...

用正则表达式找两个字符之间的内容
用替换函数将下面的正则表达式替换成空,就可以去掉(到;之间所有的字符了.正则表达式:\\(([^()]+|\\(([^()]+)*\\))*\\);

Qt正则表达式 如何得到字符串中所有满足条件的字符。这个正则为什么匹配...
问题在两个小括号上,两个括号都去掉,a href=.+?可以连标签一起匹配,不想匹配标签则这样:a href=(.+?)

相似回答