当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 27 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 正则表达式匹配行首的问题
帖子发表于 : 2011-04-30 17:58 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
要想匹配位于行首的 cat
显然要用 ^cat

现在需要匹配所有不位于行首的 cat 应该用什么表达式?可以用 extended RE.


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-04-30 21:56 

注册: 2009-07-01 22:04
帖子: 919
送出感谢: 0 次
接收感谢: 13
grep -v '^cat' a


_________________
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-04-30 21:58 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
不位于行首,则前面至少有一个字符,所以可以用“.cat”
代码:
grep '.cat'


最后由 aerofox 编辑于 2011-04-30 22:04,总共编辑了 1 次

页首
 用户资料  
 
4 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-04-30 22:01 
头像

注册: 2009-01-06 15:18
帖子: 13005
地址: 人间
送出感谢: 1
接收感谢: 24
-v 反选


_________________
“有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-04-30 23:32 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
要是能用 -v 的话就好了。

我就是想问有没有正则表达式能描述这个意思。
因为在匹配一种語法文件的时候,有一个关键字不能在行首,所以要专门去掉这种情况。
如果能的话,脚本就会写的比较容易。不然就得用非常迂回的手法。渲染这种語法很常用,所以我想写的清楚些。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-04-30 23:35 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
我看三楼的方法行。用用试试。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-01 18:46 

注册: 2009-07-01 22:04
帖子: 919
送出感谢: 0 次
接收感谢: 13
pangding 写道:
我看三楼的方法行。用用试试。

真的不行:
代码:
kose5@kose5-Aspire-4552:~$ cat a
cat dsf dsdf
df cat fgfg cat
(#为了显示空格) cat
12cat
cat nm cat
cat bncat
ccat
asd dsf
kose5@kose5-Aspire-4552:~$ grep '.cat' a
df cat fgfg cat
(#为了显示空格) cat
12cat
cat nm cat
cat bncat
ccat


_________________
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。


最后由 fnan 编辑于 2011-05-01 19:15,总共编辑了 2 次

页首
 用户资料  
 
8 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-01 18:55 

注册: 2009-07-01 22:04
帖子: 919
送出感谢: 0 次
接收感谢: 13
pangding 写道:
要是能用 -v 的话就好了。

我就是想问有没有正则表达式能描述这个意思。
因为在匹配一种語法文件的时候,有一个关键字不能在行首,所以要专门去掉这种情况。
如果能的话,脚本就会写的比较容易。不然就得用非常迂回的手法。渲染这种語法很常用,所以我想写的清楚些。

怎么不早说不要行首符号,不能用awk?:
引用:
kose5@kose5-Aspire-4552:~$ cat a
cat dsf dsdf
df cat fgfg cat
(#为了显示空格) cat
12cat
cat nm cat
cat bncat
ccat
asd dsf
kose5@kose5-Aspire-4552:~$ awk -F"cat" '{if ($1 != "" && NF > 1) print $0}' a
df cat fgfg cat
(#为了显示空格) cat
12cat
ccat
kose5@kose5-Aspire-4552:~$


_________________
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-01 19:31 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
谢谢 fnan 的耐心解答。

不过 .cat 其实就差不多了。
我后来发现把那个关键词看成 " cat\b" 基本就行。(\b 是 perl 里的 word boundary,我用的不是 perl 但也支持类似的表达)。就是 cat 是一个完整的单词,不能是 catxxx 也不能是 xxxcat。

现在没发现什么明显的 bug,这么写有什么问题?


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-01 19:34 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
用什么都行 awk 也可以。

cat xxxx cat xxxx
这种行也要,因为它含一个合法的 cat。


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-02 20:51 

注册: 2009-07-01 22:04
帖子: 919
送出感谢: 0 次
接收感谢: 13
pangding 写道:
谢谢 fnan 的耐心解答。

不过 .cat 其实就差不多了。
我后来发现把那个关键词看成 " cat\b" 基本就行。(\b 是 perl 里的 word boundary,我用的不是 perl 但也支持类似的表达)。就是 cat 是一个完整的单词,不能是 catxxx 也不能是 xxxcat。

现在没发现什么明显的 bug,这么写有什么问题?

问题不是怎样写,而是才发现猜问题比脚本本身更有挑战性。
这么说完整问题是: 有单词cat,不是单独在行首?还是根本与行首无关,有单词cat就行?


_________________
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-03 13:17 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
看来我一开始说的不清楚。

是要找所有的 单词 cat,但是如果这个单词出现在行首,则不认为它是要找的。

像我举例的
cat xxxx cat xxxx
其中第一个就不合法,但第二个是对的。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-03 13:27 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
只不过这里的 cat 要是单词,就是不能是 catxxx 或者 xxxcat 或者 xxxcatxxx。

其实在三楼提示了点以后,我已经能用 perl 描述这个表达式了。

在 vi 里应该可以用类似
/.\zs\<cat\>/
的表达式表达。

\zs 用来描述匹配从这开始。即前面的 . 只是为了向后检查。有点类似 perl 里的 (?<=pattern),表示这个匹配前面至少有一个字符,因而不在行首。
\< 和 \> 在 vi 里表示单词边界。

不过大家有兴趣也可以试试别的方法。不过不是所有的正则引擎的这么给力的。不一定能描述出来。


最后由 pangding 编辑于 2011-05-03 13:44,总共编辑了 2 次

页首
 用户资料  
 
14 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-03 13:35 

注册: 2011-03-01 23:14
帖子: 48
送出感谢: 5
接收感谢: 0 次
现在可以放宽条件,用 -v 或者 管道 都可以。awk 呀 sed 都可以用。


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 正则表达式匹配行首的问题
帖子发表于 : 2011-05-03 13:44 
头像

注册: 2009-04-11 23:46
帖子: 4131
系统: Arch Linux
送出感谢: 11
接收感谢: 124
pangding 写道:
现在可以放宽条件,用 -v 或者 管道 都可以。awk 呀 sed 都可以用。

代码:
grep -oP '(?!^)\bcat\b'


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 27 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译