免费注册 查看新帖 |

Chinaunix

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

[文本处理] 关于^是取反还是句首 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-08-20 09:17 |只看该作者
回复 7# id_for_fun


    楼上的我建议看看 rx(regular express) ,这个是基础啊:
[A-Z] :表示所有大写字母(当然一次只能出现其中的任意一个)


我们说的空白字符: \t 空格 回车等等  提出了一个统一的标准(POSIX): [:space]  用这个来表示,当然原来老的用\s 就表示空白字符,这个又涉及到  字符集(Ascii unicode 之说) 就深入到这里 [:digit:] 数字集合 等等表示了。

[[:space:]] 是在上边的集合 外边套了一个方括号表达式马甲。哈哈

^ 的取反只是针对[] 马甲来说的,你完全可以写成[^\t空格回车等等]  [^0-9]。当然如果你想用POSIX的统一标准写法
[^[:space]]  完全没有问题 , 你的明白?


至于取反那个不在这个马甲里边的情况都是取反(当然我说的是正则表达式哦,有人和我扯表示行头,我就和你急!) 。你的明白?

论坛徽章:
0
12 [报告]
发表于 2012-08-20 10:02 |只看该作者

[^...]这种才是取反吧。

论坛徽章:
0
13 [报告]
发表于 2012-08-20 12:06 |只看该作者
回复 11# wuxiaobo_2009


多谢回复。
你看了我的帖子得出了什么结论,我表示很迷惑,是不是我哪里表达不清楚呃。

“[^[:space]]  完全没有问题 , 你的明白?”
我的明白。但是我没说他有问题啊。

论坛徽章:
0
14 [报告]
发表于 2012-08-20 12:27 |只看该作者
本帖最后由 id_for_fun 于 2012-08-20 12:31 编辑

回复 9# yonka

确切的讲, 当^ 处于一个表示集合的符号(就是一对中括号[])的里边的最前面的(像这样[^...])时候,表示取反。
其他场合,作为‘开头的位置’ 匹配

3楼 ,6楼 :
不是取反, 匹配为:开头是空白字符

9楼:

为了匹配空白字符, 你要用[[:space:]]
[:space:]这样的写法, 只有在一个集合环境里才有意义。
也就是说, 你 grep ^[:space:]  ,表示的并不是开头是空白字符,他表示开头是 :, s, p, a, c, e 这几个中的一个。

所以虽然定义的[:space:] 表示空白字符, 但是通常你看到的时候都是 [[:space:]]

[^[:space:]] 这个表示不是空白的字符。其他楼的兄弟回答过了。

你man grep看一看就明白。这东西看文档最方便了, 看一遍什么都明白了。
(就算我解释的都是正确的, 你总是会觉得不完全可信,自己看文档最可信)

man grep 然后搜一下 :space 找到这部分, 读的时候看仔细点,看清楚它的确切含义,否则容易理解错误,就比如11 楼。哼哼!!

编辑:修改错字

论坛徽章:
0
15 [报告]
发表于 2012-08-20 14:42 |只看该作者
回复 14# id_for_fun


    “为了匹配空白字符, 你要用[[:space:]]
[:space:]这样的写法, 只有在一个集合环境里才有意义。”


“只有在一个集合环境里才有意义”作何解?我还是下意识的把[:space:]理解为a、b这样的字符,就认为既然可以grep a,那肯定也可以grep [:space:]啊...
如果不行的话,那我用grep "[:space:]"是否可以呢?

论坛徽章:
0
16 [报告]
发表于 2012-08-20 14:50 |只看该作者
回复 10# personball


    猫先生还是那么一语中的。

表示取反只能是在字符集的格式下吗?
那我如果要表示非A也只能是grep [^A]对么?
那如果要表示非fish这个词呢?

论坛徽章:
0
17 [报告]
发表于 2012-08-20 14:53 |只看该作者
回复 16# yonka


    grep 有个-v选项,可以试试

   -v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)

grep -v fish 之类

论坛徽章:
0
18 [报告]
发表于 2012-08-20 15:44 |只看该作者
回复 17# personball


    这个我知道,我还以为有表达式的表示方法呢^_^

论坛徽章:
0
19 [报告]
发表于 2012-08-22 11:14 |只看该作者
本帖最后由 wuxiaobo_2009 于 2012-08-22 11:16 编辑

回复 18# yonka


   我个人理解是RX,就是找到你匹配的东东就行,像很多工具sed awk grep 甚至vi perl 之流,完全可以实现(都是逐行处理文本),你不匹配要不用! 有可能用条件else 等等就实现了,RX 就是看是否匹配,再软件程序中如何实现做到高效
快速写出有效代码,咱们在这空谈RX 没有意思,工具实现起来也存在差异! 希望你能明白。

论坛徽章:
0
20 [报告]
发表于 2012-08-22 11:21 |只看该作者
回复 14# id_for_fun

别扯了,你说的grep 中的rx 不是rx 。^ 表示行头,那个rx 书中给你说了。你真牛逼。

它只在字符集[] 中表示非!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP