2010-05-25 28 views
5

Tôi đã sử dụng regExp bỏ một chút thời gian nhưng vẫn còn xa là một chuyên gia. Lần này tôi muốn xác nhận một công thức (hoặc biểu thức toán học) bởi regExp. Phần khó khăn ở đây là để xác nhận hợp lệ bắt đầu và kết thúc dấu ngoặc đơn với trong công thức.
Tôi tin rằng, sẽ có một số mẫu trên web nhưng tôi không thể tìm thấy nó. Ai đó có thể đăng liên kết cho ví dụ đó không? hoặc giúp tôi bằng một số phương tiện khác?RegExp để xác nhận một công thức (biểu thức toán học với dấu ngoặc đơn phù hợp)?

Trả lời

5

Ngôn ngữ có dấu ngoặc đơn phù hợp không phải là ngôn ngữ thông thường và do đó có thể không được nhận dạng bằng cụm từ thông dụng. Một số triển khai biểu thức chính quy (ví dụ trong .NET framework) có các phần mở rộng để giải quyết vấn đề này nhưng điều đó thực sự không có gì thú vị để làm việc. Vì vậy, tôi đề nghị sử dụng một trình phân tích cú pháp có sẵn hoặc tự mình thực hiện một trình phân tích cú pháp đơn giản (vì lợi ích của việc vui).

Để tiện ích mở rộng trong triển khai .NET thấy MSDN on balancing groups.

+0

Tôi đã sử dụng RegExp này làm mẫu trong lược đồ XML để xác thực giá trị của một thuộc tính. Bất kỳ đề xuất nào trong ngữ cảnh này? – WSK

+0

* nhưng đó thực sự là không có niềm vui để làm việc với * là một cách nói! Cố gắng để mổ xẻ những con quái vật như vậy là một cơn ác mộng! :) –

+0

Nếu bạn muốn sử dụng các công cụ có sẵn từ trường XML, bạn có thể thử sử dụng XSLT. XSLT là một ngôn ngữ hoàn chỉnh Turing và do đó có khả năng thực hiện công việc nhưng tôi không thể thực sự biết bao nhiêu nỗ lực này sẽ mất và nếu kết quả sẽ là một đoạn mã tốt đẹp. –

3

Nếu biểu thức toán học của bạn liên quan đến dấu ngoặc đơn lồng nhau, thì đó không phải là ngữ pháp thông thường mà là ngữ pháp tự do và như vậy, không thể phân tích cú pháp bằng regex.

+0

+1 khi bạn lấy các từ ra khỏi miệng. Mặc dù người ta có thể nhận được gần với backtracking nhưng đó là hạn chế và nó là, khá thẳng thắn, một hack và một dấu hiệu bạn đang sử dụng công cụ sai cho công việc. –

+0

Tốt hơn worded: * không thể được phân tích cú pháp bằng cách sử dụng regex triển khai không hỗ trợ đệ quy phù hợp * (Perl, PHP và .NET * có thể * làm điều này). –

+0

@Bart - anh ta không chỉ định ngôn ngữ vì vậy tôi đoán nó là một chuẩn regex, không phải của Perl – DVK

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