免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: autumn_leaf
打印 上一主题 下一主题

请教正则表达式的难题,谢谢 [复制链接]

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
51 [报告]
发表于 2011-05-25 15:39 |只看该作者
我也郁闷,简单说是这样
比如一个函数名是ABC() 括号内可以是任意字符,就是要把括号内的所有内 ...
autumn_leaf 发表于 2011-05-25 15:32



    你需要的是 AI 不是编程解决。字符串中的引号还要转意呢,给我的感觉是你思路混乱,无法解释清自己的问题

论坛徽章:
0
52 [报告]
发表于 2011-05-25 15:43 |只看该作者
简单的问题,复杂化,不是Perl的本质与初衷。
2gua 发表于 2011-05-25 15:36



大侠,那咋整呢,能否指导一下,谢谢

论坛徽章:
0
53 [报告]
发表于 2011-05-25 15:45 |只看该作者
你需要的是 AI 不是编程解决。字符串中的引号还要转意呢,给我的感觉是你思路混乱,无法解释清自 ...
zhlong8 发表于 2011-05-25 15:39



    就这么说吧
字符串里含有 ABC() 这样的函数,ABC() 的括号内部可以是任意字符,需要提取ABC() 括号的所有内容
比如 XXX ABC(FF")"\n); ASFDS 需要获取 ABC(FF")"\n);
当然不会出现 ABC(ABC()YYY) 这样的情况

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
54 [报告]
发表于 2011-05-25 15:59 |只看该作者
就这么说吧
字符串里含有 ABC() 这样的函数,ABC() 的括号内部可以是任意字符,需要提取ABC() 括 ...
autumn_leaf 发表于 2011-05-25 15:45



    你这里哪个才是对应的 ) 其实是由下文决定的,下文如果没有 ABC( 那就是最后一个 ),如果有 ABC( 那就是 ABC( 前面那个 )

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
55 [报告]
发表于 2011-05-25 16:03 |只看该作者
本帖最后由 yinyuemi 于 2011-05-25 16:23 编辑

回复 54# autumn_leaf
  1. echo 'XXX ABC(FF")"\n); ABC(10ASDKJFD(DSF)DLKFA"(11"ADF10);
  2. ABC(sdf


  3. );' |perl -F'' -ane '
  4. for($i=0;$i<$#F;$i++)
  5. {if(${F[$i]}=~/\"/){$b++;if($b==2){$b=0}};
  6. if(${F[$i]}=~/\(/&&$b==0){$j++};
  7. if(${F[$i]}=~/\)/&&$b==0){$j--};
  8. $v="$v${F[$i]}";
  9. if($j==0){{if($v=~/[()]/){print $v,"\n"}};$v=""}}'
  10. (FF")"\n)
  11. (10ASDKJFD(DSF)DLKFA"(11"ADF10)
  12. (sdf)
复制代码

论坛徽章:
0
56 [报告]
发表于 2011-05-25 16:06 |只看该作者
你这里哪个才是对应的 ) 其实是由下文决定的,下文如果没有 ABC( 那就是最后一个 ),如果有 ABC( ...
zhlong8 发表于 2011-05-25 15:59



最后一个
肯定是以ABC(开头,然后一直到最后一个)
我觉得这么说是否能描述明白
ABC()就是一个函数 ,函数的参数可以是任意字符,需要把函数的参数提取出来,也就是参数的完整内容
但是不会出现  ABC(ABC())这样的嵌套,但是会有ABC(100XYZ()77HH)这样的嵌套,那么提取 100XYZ()77HH 或者打印出ABC(100XYZ()77HH)

文本可能是这样的

XXXXXXXXX
ABC(100XYZ()77HH);
ABC(
ASF
);
777

那么需要提取
ABC(100XYZ()77HH);
ABC(
ASF
);

也就是总共获取了两个ABC函数

论坛徽章:
0
57 [报告]
发表于 2011-05-25 16:07 |只看该作者
回复  autumn_leaf
yinyuemi 发表于 2011-05-25 16:03



    谢谢,这是啥意思啊?我想要一个 .pl文件,能够执行的,

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
58 [报告]
发表于 2011-05-25 16:16 |只看该作者
谢谢,这是啥意思啊?我想要一个 .pl文件,能够执行的,
autumn_leaf 发表于 2011-05-25 16:07



    如果真像我说的那个意思那就是这个,其实以前写过类似的
while ( $s =~ /(?|
                 (ABC\(.*\))
                      [^)]*(?=ABC\()|
                      (ABC\(.*\))[^)]*\z)/gsx
                            ) {
                                say $1;
                            }

论坛徽章:
0
59 [报告]
发表于 2011-05-25 16:19 |只看该作者
本帖最后由 autumn_leaf 于 2011-05-25 16:26 编辑
如果真像我说的那个意思那就是这个,其实以前写过类似的
while ( $s =~ /(?|
                 ...
zhlong8 发表于 2011-05-25 16:16



我测试了一下简单的例子,倒是对的
我的需求简单说就是这样
一个文本文件
XXXXXXXXXX
ABC(11SSTY(1u))
MMMMMMMMM
88888888
ABC(yy"Vf)W"
GHHH)

可能含有多个ABC() 函数,ABC()函数的括号内可能是任意字符,但是不会出现ABC(ABC())嵌套,
需要提取所有ABC函数的完整内容,
比如上面的例子就是要
ABC(11SSTY(1u))
ABC(yy"Vf)W"
GHHH)

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
60 [报告]
发表于 2011-05-25 16:25 |只看该作者
我测试了一下简单的例子,倒是对的
我的需求简单说就是这样
一个文本文件
XXXXXXXXXX
ABC(11SSTY ...
autumn_leaf 发表于 2011-05-25 16:19



    我就是按你的意思写的。ABC() 括号里面可以出现任何东西,唯一不可能出现的就是 'ABC('
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP