Tôi gặp sự cố khi sử dụng Perl grep() với một chuỗi mà có thể chứa ký tự được hiểu là số lượng biểu thức thông thường.Có một hàm Perl để biến một chuỗi thành một regexp để sử dụng chuỗi đó làm mẫu không?
Tôi gặp lỗi sau khi mẫu grep là "g ++" vì ký hiệu '+' được hiểu là số lượng. Đây là kết quả của chương trình cho rằng sau:
1..3
ok 1 - grep, pattern not found
ok 2 - grep, pattern found
Nested quantifiers in regex; marked by <-- HERE
in m/g++ <-- HERE/at escape_regexp_quantifier.pl line 8.
Có một modifier tôi có thể sử dụng để chỉ cho grep rằng quantifiers được bỏ qua, hoặc là có một chức năng mà sẽ thoát khỏi quantifiers?
#! /usr/bin/perl
sub test_grep($)
{
my $filter = shift;
my @output = ("-r-xr-xr-x 3 root bin 122260 Jan 23 2005 gcc",
"-r-xr-xr-x 4 root bin 124844 Jan 23 2005 g++");
return grep (!/$filter/, @output);
}
use Test::Simple tests => 2;
ok(test_grep("foo"), "grep, pattern not found");
ok(test_grep("gcc"), "grep, pattern found");
ok(test_grep("g++"), "grep, pattern found");
PS: ngoài câu hỏi trả lời ở trên, tôi hoan nghênh mọi phản hồi về việc sử dụng Perl ở trên như tôi vẫn đang học. Cảm ơn
lưu ý \ Q kết thúc tại \ E, có lẽ nên đảm bảo rằng \ E trong nội dung được thoát. – Hasturkun
Bạn không cần phải - \ E trong mẫu * nội suy * không gây ra sự cố nào. – hexten