首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么字符在regex表达式中的顺序会影响sed?

为什么字符在regex表达式中的顺序会影响sed?
EN

Stack Overflow用户
提问于 2013-02-17 12:59:56
回答 1查看 124关注 0票数 1

tv.txt文件如下所示:

代码语言:javascript
运行
复制
mms://live21.gztv.com/gztv_gz 广州台[可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3]
mms://live21.gztv.com/gztv_news 广州新闻台·直播广州(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)
mms://live21.gztv.com/gztv_kids 广州少儿台(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)
mms://live21.gztv.com/gztv_econ 广州经济台

我想把它分成三组。

代码语言:javascript
运行
复制
sed -r 's/([^ ]*)\s([^][()]*)((\(.+\))*|(\[.+\])*)/\3/'  tv.txt 

得到结果:

代码语言:javascript
运行
复制
[可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3]    
(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)    
(可于Totem/VLC/MPlayer播放,记得把高宽比设置成4:3)   

当我把它写到

代码语言:javascript
运行
复制
sed -r 's/([^ ]*)\s([^][()]*)((\(.+\))*|(\[.+\])*)/\3/'  tv.txt   

它不能工作。

唯一的区别是[^][()][^[]()][^\[\]()]和转义字符都不能使其正常运行。

我想知道原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-17 13:07:41

]放入字符类的POSIX规则有点晦涩难懂,但仔细想想就会明白。

对于正(非负)字符类,]必须是第一个字符:

代码语言:javascript
运行
复制
[]and]

这会将任何字符and]识别为字符类的一部分。

对于被取反的字符类,]必须是^之后的第一个字符

代码语言:javascript
运行
复制
[^]and]

这会将除and]之外的任何字符识别为character类的一部分。

否则,[之后的第一个]将标记字符类的结束。在字符类中,大多数普通的正则表达式特殊字符失去了它们的特殊含义,而其他字符(特别是-减号)获得了特殊含义。(如果需要字符类中的-,它必须是“first”或“last”,其中“first”表示“在可选^之后,且仅当]不存在时”。)

在您的示例中:

  • [^][()] -这是一个可识别除[](),but
  • [^[]()]之外的任何字符的求反字符类-这是一个可识别除[之外的任何字符的求反字符类,后面是您正在使用的正则表达式家族中的任何()符号,以及代表其自身的]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14918132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档