免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7488 | 回复: 2
打印 上一主题 下一主题

正则表达式解析xml时遇到的问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2008-01-08 14:40 |显示全部楼层
原帖由 baicj 于 2008-1-8 14:14 发表
比如这样一个字符串:
TESTTesttestTesT

正则表达式应该怎么写才能提取出“TEST”?

用sed 's/\(.*\).*/\1/'只能得到:TESTTesttest

另外,为什么sed 's/\(.*\)/\1/'得到的结果是TESTTesttestTesT?
...


正则表达式匹配 按照最长匹配原则 ,也就是说 “/<aaa>.*<aaa>/匹配最长的 <aaa>囊括的字符串
对于你给的输入和正则表达式:

<AAA>TEST</AAA><BBB>Test</BBB><AAA>test</AAA><BBB>TesT</BBB>


用sed 's/<AAA>\(.*\)<\/AAA>.*/\1/'
\1代表最长的<AAA>之间的字符 : <AAA>TEST</AAA><BBB>Test</BBB><AAA>test</AAA>
所以只能得到:TEST</AAA><BBB>Test</BBB><AAA>test

另外,sed 's/<AAA>\(.*\)<\/AAA>/\1/'只替换了 <aaa>中间的部分,后面的 <bbb>部分没变化,自然
得到的结果是TEST</AAA><BBB>Test</BBB><AAA>test<BBB>TesT</BBB>?

[ 本帖最后由 jinl 于 2008-1-8 14:44 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-08 15:17 |显示全部楼层
原帖由 baicj 于 2008-1-8 15:11 发表
= =!
刚才测试了一下TEST,的确sed和awk的表达式不行,因为有[^
a
awk应该可以实现阿,
awk -F "<[\]?AAA>" '{ print $1}'

[ 本帖最后由 jinl 于 2008-1-8 15:22 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-01-08 15:54 |显示全部楼层

回复 #14 baicj 的帖子

echo "<AAA><BBB>TEST</BBB></AAA><AAA></AAA>"|awk -F "<[/]?AAA>" '{print $2}'
好像$1是空白,不过$2是需要的内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP