2016-03-07 20 views
5

Tôi không thể tìm thấy tham chiếu chính thức cho các quy tắc ưu tiên cho Perl regular expressions. Những gì tôi có thể tìm thấy chỉ là Know the precedence of regular expression operators. Tuy nhiên, nó không phải là một tài liệu tham khảo chính thức được đưa ra bởi perldoc.Quy tắc ưu tiên cho biểu thức chính quy Perl là gì?

+0

perlre chứa một phần * Phiên bản 8 Regular Expressions * cung cấp một mô tả bằng lời nói của mô hình regex phù hợp với cơ chế. – laune

+0

@laune, tôi vừa duyệt _Version 8 Regular Expressions_. Nhưng tôi không thể tìm thấy bất cứ điều gì có liên quan đến ưu tiên. Bạn có thể vui lòng chỉ ra cách nó có liên quan đến ưu tiên không? –

+2

Tôi nghĩ rằng văn bản này làm rõ vấn đề, nhưng bạn có thể phải đọc (một chút) giữa các dòng. - Dù sao, không bao giờ nghi ngờ về sự ưu tiên của dấu ngoặc đơn, số lượng, vị trí và các lựa chọn thay thế trong bất kỳ hệ thống regex nào (sớm) * tiện ích nix, awk, Perl4, Perl5, Java, Lược đồ XML và nhiều thứ khác. - Cái gì đang làm phiền bạn vậy?? – laune

Trả lời

4

Cụm từ thông dụng chỉ có hai toán tử nhị phân, một trong số đó là ngầm định chứ không phải biểu thị bằng ký hiệu. Các biểu thức chính quy cũng có một số toán tử đơn nhất, nhưng ưu tiên của chúng là tranh luận do các hạn chế về toán hạng của chúng. Điều đó làm cho việc nói về quyền ưu tiên thực sự kỳ quặc.

Sẽ đơn giản truyền đạt các thông tin mà bạn tìm kiếm bằng cách sử dụng câu lệnh sau:

  • Quantifiers sửa đổi một nguyên tử duy nhất.
  • Công cụ điều chỉnh bộ định lượng sửa đổi một bộ định lượng đơn.
  • Cách thay thế không bị chặn trừ ngoại trừ các parens mà chúng cư trú.

Thông tin trên được chuyển tải theo cách này hay cách khác trong perlretut.


Điều đó nói rằng, có thể tạo bảng ưu tiên. Vì các câu lệnh trên truyền đạt tất cả thông tin bạn cần, có thể xây dựng bảng ưu tiên từ chúng. Nó được như sau:

  1. Atoms (ví dụ a, \n, \^, ., ^, \w, [...], \1, (...))
  2. Postfix unary nhà khai thác (quantifiers và bổ lượng hóa)
  3. ngầm "theo sau bởi "toán tử giữa (nguyên tử có thể được định lượng)
  4. Luân phiên

Điều này khớp với biểu đồ trong trang mà bạn đã liên kết.


Đối với niềm vui, sau đây sẽ là BNF:

pattern    ::= <alternation> 

alternation   ::= <sequence> <alternation2> 
alternation2   ::= "|" <alternation> | "" 

sequence    ::= <quantified_atom> <sequence> | "" 

quantified_atom  ::= <atom> <quantified_atom2> 
quantified_atom2  ::= <modified_quantifier> | "" 
modified_quantifier ::= <quantifier> <modified_quantifier2> 
modified_quantifier2 ::= <quantifier_modifier> | "" 
+0

Bạn không cần phải, nó đã tuyệt vời rồi :) – Aaron

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