2013-10-11 23 views
7

vì vậy tôi có chức năng nàyBash regex phù hợp không làm việc

function test(){ 
local output="CMD[hahahhaa]" 
if [[ "$output" =~ "/CMD\[.*?\]/" ]]; then 
    echo "LOOL" 
else 
    echo "$output" 
fi; 

} 

tuy nhiên thực hiện thử nghiệm trong dòng lệnh sẽ ra $ đầu ra thay vì "lool" mặc dù thực tế rằng các mô hình nên được phù hợp với $ đầu ra ...

tôi đã làm gì sai?

+0

Bạn đang cố sử dụng '. *? 'Làm kết quả không tham lam? 'bash' không hỗ trợ toán tử kiểu Perl đó. Các dấu gạch chéo chuyển tiếp cũng là một phần của cú pháp khớp của Perl, không phải là một phần của biểu thức chính quy. – chepner

Trả lời

13

Không sử dụng dấu ngoặc kép ""

if [[ "$output" =~ ^CMD\[.*?\]$ ]]; then 


Cập nhật: (để đáp ứng với @frhd)

Vâng, các nhà điều hành regex =~ hy vọng một thể viện chứng biểu thức chính quy trên nó RHS và chỉ kết hợp chuỗi phụ trừ khi neo ^ (bắt đầu nhập) và $ (e nd của đầu vào) cũng được sử dụng để làm cho nó khớp với toàn bộ LHS.

Báo giá"" ghi đè hành vi này và buộc kết hợp chuỗi đơn giản thay vì tức là đối sánh bắt đầu tìm kiếm tất cả các ký tự này \[.*?\] theo nghĩa đen.

+0

+1 Đã phải xóa câu trả lời của tôi :) – anubhava

+0

Thôi nào, điều đó cũng đã làm việc quá :) –

+0

Nó sẽ có nhưng câu trả lời của bạn là khoảng 30 giây nhanh hơn – anubhava

Các vấn đề liên quan