d******i 发帖数: 7160 | 1 比如下面这个匹配电话号码 (123) 456-7890 的写法(lc接受的正确版):
grep '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' file.txt
显然()和{}是本身默认为token,需要转义才做语义符的。
而[]是本身默认为语义符,需要转义才做token的。
为啥不能把语法统一了呢?
请过来人指教。
谢谢! |
n******7 发帖数: 12463 | 2 grep/vim/perl等的正则语法都有些不同
所以没必要不要折腾这个,用一种就好
比如grep 可以用-P
不然会精分 |
w**z 发帖数: 8232 | 3 我每次都要看manual 才能写。
【在 d******i 的大作中提到】 : 比如下面这个匹配电话号码 (123) 456-7890 的写法(lc接受的正确版): : grep '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' file.txt : 显然()和{}是本身默认为token,需要转义才做语义符的。 : 而[]是本身默认为语义符,需要转义才做token的。 : 为啥不能把语法统一了呢? : 请过来人指教。 : 谢谢!
|
d****i 发帖数: 4809 | 4 最标准的正则表达式应该是Perl了吧,最原生的应该是Bourne shell的。
【在 n******7 的大作中提到】 : grep/vim/perl等的正则语法都有些不同 : 所以没必要不要折腾这个,用一种就好 : 比如grep 可以用-P : 不然会精分
|
d******i 发帖数: 7160 | 5 大哥,正是不想折腾才有OP的问题。
加P试了,没有啥区别啊。
还是一样的问题:转义的默认项不一致。
【在 n******7 的大作中提到】 : grep/vim/perl等的正则语法都有些不同 : 所以没必要不要折腾这个,用一种就好 : 比如grep 可以用-P : 不然会精分
|
n******7 发帖数: 12463 | 6 你到底试了没?
-> grep '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' test
(123) 456-7890
-> grep -P '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' test
-> grep -P '\([0-9]{3}\) [0-9]{3}-[0-9]{4}' test
(123) 456-7890
-> grep -P '\(\d{3}\) \d{3}-\d{4}' test
(123) 456-7890
不知道为啥,贴出来的backslash都没了,要修改才好
【在 d******i 的大作中提到】 : 大哥,正是不想折腾才有OP的问题。 : 加P试了,没有啥区别啊。 : 还是一样的问题:转义的默认项不一致。
|
n******7 发帖数: 12463 | 7 不好说那个标准,不过我只用perl的,减少记忆负担和错误
python的regexp跟perl的也一样
我记得哪里看到过一个不同版本的regexp语法对照表,vim用的是basic regular
expression
grep自己有一套,但是可以兼容其他几类,编程语言perl风格是主流
还好我不用很多regexp的东西,不然这种回字几种写法的事情要搞死人
【在 d****i 的大作中提到】 : 最标准的正则表达式应该是Perl了吧,最原生的应该是Bourne shell的。
|
d******i 发帖数: 7160 | 8 多谢,之前没写对。
perl style的还是要清新些。
【在 n******7 的大作中提到】 : 你到底试了没? : -> grep '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' test : (123) 456-7890 : -> grep -P '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' test : -> grep -P '\([0-9]{3}\) [0-9]{3}-[0-9]{4}' test : (123) 456-7890 : -> grep -P '\(\d{3}\) \d{3}-\d{4}' test : (123) 456-7890 : 不知道为啥,贴出来的backslash都没了,要修改才好
|