2008-10-31 13 views
11

Bạn đã sử dụng động từ kiểm soát backlacking Perl 5.10 trong regex chưa? Và họ đã giúp bạn đạt được những vấn đề gì?Bạn đã sử dụng động từ kiểm soát backlacking Perl 5.10 trong regex chưa?


Cũng như nền: Tôi đã thực hiện một số không quan trọng, nhưng tôi không thể nhận được bất kỳ kết quả thực sự hữu ích nào.

Như một so sánh, khi tôi bắt đầu nhận được những gì các nhóm (?> đã làm, nó bắt đầu hiển thị nhiều hơn trong regexes của tôi. Tôi thích ý tưởng điều chỉnh thế giới của Perl regex thành một tập hợp giả định cụ thể. Khi các ngôn ngữ RE trở nên nổi bật hơn, việc quay ngược lại đã làm cho hiệu suất của REs cực kỳ khác biệt so với FSA nạc và trung bình mà chúng dựa trên.


Khi ai đó có thể cho tôi biết những gì thực hiện khác của RES đã backtracking động từ kiểm soát - và PCRE không, tôi có thể thừa nhận rằng nó thuộc trong khu vực nói chung về chuyên môn của những người am hiểu về regexes. Đây là câu hỏi về câu hỏi regex Perl và những người giúp đỡ mọi người với Ruby, Python, C#, Javascript - hoặc bất kỳ ứng dụng PCRE nào của khách hàng-- có thể không giúp hoặc xem nó như một sự lãng phí không gian cho các thẻ mà họ thường đọc .

+0

Chúng tôi có cần tạo thẻ cho [perl-regex] không? –

+1

Có quá nhiều bài đăng triển khai cụ thể trong thẻ regex. Một số người nói "Chỉ Java" hoặc "Trong C#, ...." Vì vậy, trong làm phiền tôi ở đó, theo như tôi biết chỉ Perl có những động từ, vì vậy nó là cụ thể cho Perl. – Axeman

+0

Tôi không thấy làm thế nào "câu trả lời cho câu hỏi sẽ có xu hướng gần như hoàn toàn dựa trên ý kiến" thậm chí là một phê phán đáng tin cậy. Một ứng dụng được trình bày hoặc sử dụng động từ regex hoặc nó không hoạt động hay không, theo cách tương tự như "giải pháp" được trình bày cho các câu hỏi khác. Và liệu nó có giải quyết được vấn đề * đáng kể đủ hay không, cũng phải chịu cùng một loại chủ quan mà bản thân hệ thống bầu cử đóng gói trong việc quyết định xem "giải pháp" có phù hợp với câu hỏi hay không. – Axeman

Trả lời

2

Có, tôi có, mặc dù không quá nhiều. Tôi sử dụng chúng để kiểm soát backtracking, thường là để buộc nó để làm cho hoán vị nhiều hơn nữa. Dưới đây là số amusing solution và đây là số practical one.

+1

Cuối cùng, tôi đang học cách sử dụng một số động từ regex. Nhờ bạn và cũng nhờ vào những gì dường như là một phần mở rộng trong ('perlre') [http://perldoc.perl.org/perlre.html) (nhưng có lẽ đó là bạn quá), tôi thực sự đã đưa ra phương án này RE cho giải pháp thứ hai: 'qr {x (* PRUNE) (a? B? C?) (? (? {$ 1}) | (* FAIL))} x'. – Axeman

1

Thành thật mà nói, tôi chưa từng sử dụng 5,10. Tuyệt vời như một số tính năng mới, tôi chỉ sử dụng chúng trong các kịch bản cá nhân. Đối với sản xuất tôi nhắm mục tiêu khả năng tương thích với 5.8. Đối với CPAN tôi nhắm mục tiêu 5.6. Điều này đã ngăn tôi chơi với hầu hết các đồ chơi mới.

Tính năng kiểm soát ngược lại rất thú vị nhưng tôi không thể thấy nhiều ứng dụng bên ngoài trình phân tích cú pháp. Tôi không thể tưởng tượng nhồi toàn bộ phân tích cú pháp vào một regex đơn lẻ. (Ngay cả khi họ hỗ trợ đệ quy ngay bây giờ!) Tôi rất vui mừng hơn về ngữ pháp Perl6.

+0

Tôi đồng ý về ngữ pháp. Nhưng động từ cung cấp cho chúng ta một chút về điều đó ngay bây giờ. – Axeman

+1

Họ làm, nhưng nó có vẻ giống như một lời trêu ghẹo hơn là bất cứ điều gì ngay lập tức hữu ích. Ngoài ra còn có rất ít "CẢNH BÁO: Các mẫu này là thử nghiệm và có thể thay đổi hoặc loại bỏ ..." báo trước trong perlre. –

+0

5.10.0 là phiên bản tối thiểu mà tôi lập trình cho những ngày này. Nó chỉ là quá khó để làm những điều hợp lý sớm hơn thế. Tôi cần nó để hỗ trợ regex tốt hơn và hỗ trợ Unicode tốt hơn. – tchrist

2

Đã nhiều năm kể từ khi tôi thực hiện bất kỳ chương trình Perl nào, vì vậy tôi thậm chí không biết về tính năng này cho đến khi bạn đề cập đến nó. Nó trông giống như một trong những tính năng hardcore mà chỉ có rất kinh nghiệm regex sẽ sử dụng (tất nhiên, cộng đồng Perl có rất nhiều những người). Perl 6 Grammars, mặt khác, trông giống như họ sẽ có rất nhiều niềm vui để chơi với.

Hiện tại, tôi hài lòng với các nhóm nguyên tử và các định lượng sở hữu .-- trên thực tế, tôi thực sự nghiện chúng. Nó đã đến mức tôi theo phản xạ cố gắng viết các regex theo cách mà họ sẽ không bao giờ quay trở lại. Tôi phải nhắc nhở bản thân mình đôi khi rằng backtracking là okay với liều lượng nhỏ, và nó không có giá trị nỗ lực để loại bỏ nó hoàn toàn.

p.s., Theo như tôi biết, các định lượng sở hữu chỉ được hỗ trợ bởi Java, PCRE (PHP, Apache, Flex 3/ActionScript 3) và công cụ regex JGSoft được RegexBuddy, EditPad Pro và PowerGrep sử dụng.

cập nhật: Hương vị Oniguruma (được sử dụng trong Ruby 1.9+ và TextMate) hỗ trợ cả nhóm nguyên tử và định lượng sở hữu. Và tất nhiên, Perl 5.10 hỗ trợ chúng ngoài các động từ kiểm soát ngược.

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