Chinaunix

标题: /^[A-Za-z]*[^;]/ 是什么意思2 [打印本页]

作者: forestlin    时间: 2006-08-25 12:54
标题: /^[A-Za-z]*[^;]/ 是什么意思2
^[A-Za-z]
以大小写英文字母开头的行显示
[^\;]
以 ;开头的行 不显示
*
将上述结果集做加法,重复的只显示一行

[ 本帖最后由 forestlin 于 2006-8-25 15:45 编辑 ]
作者: 野鸭子    时间: 2006-08-25 13:35
原帖由 forestlin 于 2006-8-25 12:54 发表
^[A-Za-z]
以大小写英文字母开头的行显示
[^\;]
以 ;开头的行 不显示
*
将上述结果集做加法,重复的只显示一行



首先多谢!


其次,我认为你对 [^;]的理解有问题
作者: forestlin    时间: 2006-08-25 13:41
原帖由 野鸭子 于 2006-8-25 13:35 发表



首先多谢!


其次,我认为你对 [^;]的理解有问题


第一,不清楚你的这个串用在什么地方,最好给出上下文
第二,我上面的解释是在 sed 中检验过的
sed -n /^[A-Z]*[^\;]/p file
作者: r2007    时间: 2006-08-25 14:24
原帖由 forestlin 于 2006-8-25 12:54 发表
^[A-Za-z]
以大小写英文字母开头的行显示
[^\;]
以 ;开头的行 不显示
*
将上述结果集做加法,重复的只显示一行

建议看看正则表达式的基础。
楼主的这个分析是错误的,但是结论没错。
作者: forestlin    时间: 2006-08-25 14:27
原帖由 r2007 于 2006-8-25 14:24 发表

建议看看正则表达式的基础。
楼主的这个分析是错误的,但是结论没错。


最讨厌看书了,呵呵
对了,这位老大帮我看看 ps 的那个问题啊
作者: 野鸭子    时间: 2006-08-25 15:34
楼主, 这是我在一个书里找到的一个例子

我认为你分析的过程有问题

首先:
^[A-Za-z]*  表示任意字符都匹配,即使是空格或null也匹配

其次:
[^;]  表示不含有";"的字符串

这样,就只有 ";" 这个字符串不能匹配这个表达式了

其实我这里对 ^[A-Za-z]*  为什么代表"任意字符都匹配"想不通

求高手给讲解
作者: Iamthetop    时间: 2006-08-25 15:36
^[A-Za-z]*  表示任意字符都匹配,即使是空格或null也匹配??

连空格或null也匹配???
作者: r2007    时间: 2006-08-25 15:40
原帖由 forestlin 于 2006-8-25 14:27 发表


最讨厌看书了,呵呵
对了,这位老大帮我看看 ps 的那个问题啊

如果没有异议,建议楼主修改一下标题。
作者: 寂寞烈火    时间: 2006-08-25 15:42
原帖由 野鸭子 于 2006-8-25 15:34 发表
楼主, 这是我在一个书里找到的一个例子

我认为你分析的过程有问题

首先:
^[A-Za-z]*  表示任意字符都匹配,即使是空格或null也匹配

其次:
[^;]  表示不含有";"的字符串

这样,就只有 " ...

建议看一看坛子里的精华贴
http://bbs.chinaunix.net/viewthr ... 1%26filter%3Ddigest
作者: Edengundam    时间: 2006-08-25 15:48
原帖由 r2007 于 2006-8-25 14:24 发表

建议看看正则表达式的基础。
楼主的这个分析是错误的,但是结论没错。



你好, 请问这样分析对吗??

1. 如果不以[a-zA-Z]开头, 且不以;开头, 匹配这个表达式.
2. 如果不以[a-zA-Z]开头, 且以;开头, 则不匹配.
3. 如果以[a-zA-Z]开头, 则都可以匹配.
作者: r2007    时间: 2006-08-25 15:54
原帖由 Edengundam 于 2006-8-25 15:48 发表



你好, 请问这样分析对吗??

1. 如果不以[a-zA-Z]开头, 且不以;开头, 匹配这个表达式.
2. 如果不以[a-zA-Z]开头, 且以;开头, 则不匹配.
3. 如果以[a-zA-Z]开头, 则都可以匹配.

结论没错。
正则一两句话说不明白(可能我的表达太糟糕了),[a-zA-Z]*[^;]是一个简单(或者叫普通)的正则。建议看看*的作用。
作者: forestlin    时间: 2006-08-25 15:56
原帖由 Edengundam 于 2006-8-25 15:48 发表



你好, 请问这样分析对吗??

1. 如果不以[a-zA-Z]开头, 且不以;开头, 匹配这个表达式.
2. 如果不以[a-zA-Z]开头, 且以;开头, 则不匹配.
3. 如果以[a-zA-Z]开头, 则都可以匹配.


呵呵,你的结论跟一楼的是一样的
作者: Edengundam    时间: 2006-08-25 16:04
原帖由 r2007 于 2006-8-25 15:54 发表

结论没错。
正则一两句话说不明白(可能我的表达太糟糕了),[a-zA-Z]*[^;]是一个简单(或者叫普通)的正则。建议看看*的作用。



*: zeor or more times....这个我很明白...毕竟曾经的形式语言不是白学了.

我想知道, 您建议的分析方法: )

我理解为: 最机械的办法, 正则语言可以构建自动机进行分析, 分析过程中只要发生匹配了, 自然忽略剩余条件...(不知道精华区的正则表达式贪婪性是不是说这个东西哈, 还没有看这个文章 )

因此对不同输入, 都会划分到不同等价类进行处理的...

这就是我分析的笨办法....
作者: r2007    时间: 2006-08-25 16:08
比如
H4561fdafkdha
开头  匹配 ^
0个字符  匹配  [a-zA-Z]*
H 匹配 [^;]

同理所有不以;开头的都可按上述方法匹配
作者: Edengundam    时间: 2006-08-25 16:12
恩, 但我以为: H4561fdafkdha因为H满足[a-zA-Z]*所以不需要下一步处理, 自然匹配了;
而类似4561fdafkdha是不满足[a-zA-Z]*而满足[^;]所以匹配;
最后;fdsdfk343是既不满足[a-zA-Z]*也满足[^;]....
作者: r2007    时间: 2006-08-25 16:17
原帖由 Edengundam 于 2006-8-25 16:12 发表
恩, 但我以为: H4561fdafkdha因为H满足[a-zA-Z]*所以不需要下一步处理, 自然匹配了;
而类似4561fdafkdha是不满足[a-zA-Z]*而满足[^;]所以匹配;
最后;fdsdfk343是既不满足[a-zA-Z]*也满足[^;]....

具体的分析还和贪婪性有点儿关系,但不会影响是否匹配的问题。
说来就罗嗦了,建议看看一些正则的资料。
作者: sosogh    时间: 2006-08-26 12:20
定位符^在[]里面跟外面意义是不同的
作者: 網中人    时间: 2006-08-28 00:52
原帖由 Edengundam 于 2006-8-25 15:48 发表



你好, 请问这样分析对吗??

1. 如果不以[a-zA-Z]开头, 且不以;开头, 匹配这个表达式.
2. 如果不以[a-zA-Z]开头, 且以;开头, 则不匹配.
3. 如果以[a-zA-Z]开头, 则都可以匹配.


恩? 這樣講, 好像就是說: 只要不以 ; 開頭就都行!  ^_^
作者: wd    时间: 2006-08-28 10:06
只要不是;开头的,都可以用 ^[a-zA-Z]*来匹配空串,然后让 [^;]匹配后面跟着的字符。
作者: r2007    时间: 2006-08-28 10:55
原帖由 wd 于 2006-8-28 10:06 发表
只要不是;开头的,都可以用 ^[a-zA-Z]*来匹配空串,然后让 [^;]匹配后面跟着的字符。

我的分析同楼上。如有不同的欢迎一起探讨。
作者: 野鸭子    时间: 2006-08-28 11:04
以";"开头的任意串肯定是不符合本表达式(包括只含有";"的行)
但为什么一个空行也不符合本表达式?

如我有如下文件:
root@sun480 # cat a.txt
--------------------------------------------------------------------------------------
a;
;
ab;
ab;c
;a
;;
ib;adf;adf
;abc;d
12345#$%
!@#$&*(
                     #注意这一行是两个空格
null
  two empty blank
                     #注意这一行没有任何空格, 问题就在本行,为什么不符合表达式?
aaa
--------------------------------------------------------------------------------------


root@sun480 # cat a.txt | grep '^[A-Za-z]*[^;]'
--------------------------------------------------------------------------------------
a;
ab;
ab;c
ib;adf;adf
12345#$%
!@#$&*(

null
  two empty blank
aaa
--------------------------------------------------------------------------------------


最后,本表达式到底是什么含义??
作者: 野鸭子    时间: 2006-08-28 11:07
原帖由 野鸭子 于 2006-8-28 11:04 发表
以";"开头的任意串肯定是不符合本表达式(包括只含有";"的行)
但为什么一个空行也不符合本表达式?

如我有如下文件:
root@sun480 # cat a.txt
---------------------------------------- ...



哦,我明白了
本表达式的正解是:
不是以;开头的且不为null的字串
不知对否? 认为不对的请举反类

谢谢
作者: wd    时间: 2006-08-28 13:11
空行当然不匹配了,这个表达式表示的至少有一个字符才有可能匹配。
作者: peterxin    时间: 2006-08-28 22:48
1 不能以;开头
2 任意其他字符(包括空格)开头

符合以上两种条件的字符串
作者: xiaozheyu    时间: 2006-08-29 17:43
[a-zA-Z]我觉得是以字母开头的任意多个字符
[^;] 不含有;的意思




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2