2010-05-10 40 views
31

Tôi biết có regex perl đó là một tiêu chuẩn thực tế nhỏ, nhưng tại sao không có ai đưa ra một tập hợp các ký hiệu, cú pháp và hành vi chuẩn?Tại sao không có tiêu chuẩn biểu thức chính quy?

+2

Tôi đã tự hỏi mình câu hỏi đó nhiều lần và không bao giờ tìm được câu trả lời hay. Tôi chỉ hạnh phúc tôi tìm thấy biểu thức bất thường.Thông tin – chilltemp

Trả lời

16

Có tiêu chuẩn theo số IEEE associated with the POSIX effort. Câu hỏi thực sự là "tại sao mọi người không theo dõi"? Câu trả lời có lẽ là nó không phức tạp như PCRE đối với sự tham lam tham lam và cái gì không.

+6

Và câu hỏi tiếp theo có lẽ là sau đó: * tại sao tiêu chuẩn POSIX không làm lại/mở rộng để bao gồm nhiều cú pháp hơn? * Bởi vì sau đó có thể mọi người có thể cố gắng theo dõi nó. –

+0

@PeterBoughton: chắc chắn nhất ... bây giờ tất cả những gì chúng ta phải làm là có được bất cứ ai để đồng ý về cách xa chúng tôi muốn đi với nó. Tôi có ý kiến ​​rằng bạn sẽ tốt hơn với một trình phân tích cú pháp đầy đủ hơn hầu hết các REs mở rộng ra khỏi đó. Nếu bạn cần ý kiến ​​trong RE của bạn, sau đó nó là quá phức tạp cho một RE. –

+0

Vâng, vâng và không. Trong khi một trình phân tích cú pháp đầy đủ có thể là một lựa chọn tốt hơn, nó thường không phải là mã súc tích (trừ khi có một DSL nhỏ gọn/tổng quát để tạo các trình phân tích cú pháp?), Và - sang một bên - bất kỳ tiêu chuẩn nào sẽ bao gồm những gì được sử dụng (ngay cả khi không nhất thiết là một cách tiếp cận hợp lý)). –

2

Vì việc tạo tiêu chuẩn là khó. Nó gần như không thể có đủ người để đồng ý về bất cứ điều gì để làm cho nó một tiêu chuẩn chính thức, hãy để một mình một cái gì đó phức tạp như regex. Các tiêu chuẩn của Defacto dễ dàng hơn nhiều.

Trường hợp điểm: HTML 5 không được dự kiến ​​trở thành tiêu chuẩn chính thức cho đến năm 2022. Nhưng đặc điểm dự thảo đã có sẵn và các tính năng chính của tiêu chuẩn sẽ bắt đầu xuất hiện trong trình duyệt trước khi tiêu chuẩn chính thức.

+2

Chỉ cần lưu ý lại: HTML5 - trong khi dự kiến ​​sẽ là đề xuất chính thức chỉ vào năm 2022, dự kiến ​​sẽ trở thành đề xuất ứng cử vào năm 2012. CSS2 (không phải 3!) vẫn chỉ ở giai đoạn đề xuất ứng cử viên, nhưng nó đẹp triển khai rộng rãi tại thời điểm này. HTML5 sẽ hoàn toàn có thể sử dụng LONG trước năm 2022. – ceejayoz

+9

Tôi tự hỏi liệu những chiếc xe bay vào năm 2022 có hỗ trợ HTML5 hay không. – Chris

+0

CSS 2 không phải là đề xuất ứng cử viên, đó là đề xuất đầy đủ và đã bắt đầu từ năm 1998. CSS 2.1 là đề xuất ứng viên và đã ở trạng thái đó kể từ giữa năm 2007. –

0

Perl lần đầu tiên (hoặc danm gần gần đầu tiên), và trong khi đó là perl và tất cả chúng ta đều thích nó, nó cũ một số người cảm thấy nó cần đánh bóng nhiều hơn (tức là tính năng). Đây là nơi các loại mới xuất hiện.

Chúng bắt đầu được chỉ định, regex được sử dụng trong .NET rất giống với regex được sử dụng bằng các ngôn ngữ khác, tôi nghĩ mọi người bắt đầu thống nhất, nhưng một số được sử dụng để thier perl cách và không muốn thay đổi.

+0

Perl được phát minh vào năm 1987 theo Wikipedia. Tôi không thể tìm thấy một ngày cho grep, nhưng tôi đảm bảo với bạn nó đã sớm hơn nhiều. Có thể đã có những triển khai trong Unix thậm chí còn sớm hơn. –

+1

Perl đến khá muộn trong trò chơi (http://en.wikipedia.org/wiki/Regular_expression#History). Henry Spencer đã viết hầu hết lòng can đảm vào cuối những năm 80 trước khi nó được hợp nhất vào đầu Perl. Nhưng việc thực hiện của Spencer là thay thế một triển khai độc quyền đã tồn tại. –

+0

Cảm ơn các bạn đã sửa chữa. Tôi biết perl đã già, nhưng tôi không chắc đó có phải là lâu đời nhất không. Điểm vẫn đứng vững, nó đang phát triển, và tôi nghĩ rằng họ đang dần dần bắt đầu hội tụ. – Aren

0

Chỉ cần đoán: không bao giờ có phiên bản đủ phổ biến để được coi là tiêu chuẩn kinh điển và không có triển khai chuẩn nào. Mọi người đến và reimplemented nó có ý tưởng riêng của họ về cách làm cho nó "tốt hơn".

8

Trên thực tế, có tiêu chuẩn biểu thức chính quy (POSIX), nhưng nó thật sự là crappy. Vì vậy, mọi người mở rộng động cơ RE của họ để phù hợp với nhu cầu của ứng dụng của họ. PCRE (biểu thức chính quy tương thích Perl) là một chuẩn giả cho các cụm từ thông dụng tương thích với công cụ RE của Perl. Điều này đặc biệt phù hợp vì bạn có thể nhúng động cơ của Perl vào các ứng dụng khác.

+6

Crappy theo cách nào? –

1

Tôi đã nghiên cứu điều này và không thể tìm thấy bất kỳ điều gì cụ thể. Tôi đoán là bởi vì regex thường là một công cụ hoạt động ON công cụ và do đó, nó sẽ nhất thiết phải có phần mở rộng nền tảng và công cụ cụ thể.

Ví dụ: trong Visual Studio, bạn có thể sử dụng cụm từ thông dụng để tìm và thay thế chuỗi trong mã nguồn của mình. Họ đã thêm các nội dung như: i để khớp với số nhận dạng. Trên các nền tảng khác trong các công cụ khác, số nhận dạng có thể không phải là khái niệm áp dụng. Trong thực tế, có lẽ các nền tảng và công cụ khác dự trữ ký tự đại tràng để thoát khỏi biểu thức.

Sự khác biệt như thế làm cho điều này trở nên khó tiêu chuẩn hóa.

+3

Điểm hợp lệ, nhưng tiêu chuẩn sẽ không chuẩn hóa "dưới đây là cách mã nhận diện được so khớp", nhưng thay vào đó "đây là cách mở rộng cho biểu tượng phù hợp tùy chỉnh" hoặc bất kỳ thứ gì để các tiện ích có thể được triển khai liên tục/dự đoán trên các nền tảng. –

+0

@Peter Điểm tốt, tiêu chuẩn có thể được khái quát hóa để phù hợp với những thứ như vậy. Điều đó sẽ làm cho nó khó đọc và thực hiện, mặc dù (đến mức của bạn, sợ đi những người hợp lý hơn :)). – Chris

-3

Vì có quá nhiều người sợ biểu thức chính quy, nên chúng chưa đủ phổ biến để đủ người hợp lý suy nghĩ về ý tưởng và ở vị trí thực hiện nó. Thậm chí nếu một cơ quan tiêu chuẩn đã hình thành và cố gắng thống nhất các hương vị khác nhau, quá nhiều người sẽ tranh luận ngoan cố về hướng tiếp cận của họ, dù tốt hơn hay không, bởi vì rất nhiều lập trình viên đang gây phiền nhiễu như vậy.

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