Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Java正则表达式和sed aren';不一样吗。。。?_Regex_String_Sed - Fatal编程技术网

Regex Java正则表达式和sed aren';不一样吗。。。?

Regex Java正则表达式和sed aren';不一样吗。。。?,regex,string,sed,Regex,String,Sed,获取以下字符串: 00543515703528 00582124628575 0034911320020 0034911320020 005217721320739 0902345623 067913187056 00543515703528 在java中应用此exp:^(06700 | 067 | 00)([0-9]*) 我的意图是从字符串的beggining中删除前导“06700、067和00” java很酷,第2组总是有我想要的号码,但在sed中它不一样: $ cat strings|s

获取以下字符串:

00543515703528
00582124628575
0034911320020
0034911320020
005217721320739
0902345623
067913187056
00543515703528
在java中应用此exp:
^(06700 | 067 | 00)([0-9]*)

我的意图是从字符串的beggining中删除前导“06700、067和00”

java很酷,第2组总是有我想要的号码,但在
sed
中它不一样:

$ cat strings|sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g'
00543515703528
00582124628575
0034911320020
0034911320020
005217721320739
0902345623
067913187056
00543515703528
我到底错过了什么

干杯


f、 我相信你的问题在于:

sed默认为BRE:默认值 sed的行为是支持基本的 正则表达式(BRE)。使用全部 本页介绍的功能 将-r(Linux)或-E(BSD)标志设置为 使用扩展正则表达式

如果没有此标志,|字符将按字面解释。试试这个例子:

echo "06700|067|0055555" | sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g'

使用扩展正则表达式时,还需要在
之前省略
\
。这对我很有用:

sed -r 's/^(06700|067|00)([0-9]*)/\2/g' strings 
还请注意,不需要单独调用
cat