2011-05-18 33 views
5

Nhận những chuỗi:Java regex và sed không giống nhau ...?

00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

Áp dụng exp này trong java: ^(06700|067|00)([0-9]*).

Ý định của tôi là xóa "06700, 067 và 00" hàng đầu khỏi việc bắt đầu chuỗi.

Đó là tất cả mát mẻ trong java, nhóm 2 luôn có số tôi dự định, nhưng trong sed nó isnt giống nhau:

$ cat strings|sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

tôi thiếu cái quái gì?

Chúc mừng,

f.

Trả lời

5

Khi sử dụng biểu thức thông thường kéo dài, bạn cũng cần phải bỏ qua \ trước (). Này làm việc cho tôi:

sed -r 's/^(06700|067|00)([0-9]*)/\2/g' strings 

cũng lưu ý rằng không cần cho một cuộc gọi riêng biệt để cat

3

Tôi tin rằng vấn đề của bạn là thế này:

mặc định sed để BRE: Giá trị mặc định hành vi của sed là hỗ trợ cơ bản Regular Expressions (BRE). Để sử dụng tất cả các tính năng mô tả trên trang này thiết lập -r (Linux) hoặc -E (BSD) cờ để sử dụng mở rộng Regular Expressions

Source

Nếu không có lá cờ này, | nhân vật được hiểu theo nghĩa đen. Hãy thử ví dụ này:

echo "06700|067|0055555" | sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
Các vấn đề liên quan