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
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.
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.
+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. –
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). –
@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
- 1. Đi tới dấu ngoặc đơn phù hợp
- 2. Xóa dấu ngoặc đơn dư thừa khỏi biểu thức số học
- 3. các ưu tiên bên phải của biểu thức toán học
- 4. Chuyển đổi biểu thức infix (có dấu ngoặc đơn) thành cây nhị phân
- 5. phù hợp với văn bản trong dấu ngoặc kép (newbie)
- 6. Xác nhận gỡ lỗi không thành công! Biểu thức: _BLOCK_TYPE_IS_VALID
- 7. Có thể có regexp phù hợp với tất cả các biểu thức chính quy hợp lệ không?
- 8. Ruby Regexp: sự khác biệt giữa mới và công đoàn với một regexp đơn
- 9. bash: double vs dấu ngoặc đơn trong đánh giá biểu thức kiểm tra tệp
- 10. Khoảng cách biểu tượng của Mathematica khi sắp xếp các công thức toán học
- 11. Python - Đánh giá biểu thức toán học trong chuỗi
- 12. Công thức phù hợp của các bộ trong Coq?
- 13. PHP biểu thức chính quy để phù hợp với một filepath
- 14. Cách thêm biểu tượng dấu hoa thị trong biểu thức toán học?
- 15. Cụm từ thông dụng phù hợp giữa dấu ngoặc kép, có dấu ngoặc kép thoát
- 16. xác nhận biểu thức xpath trong Java
- 17. Đánh giá biểu thức toán
- 18. Có công cụ khác biệt/hợp nhất nhận thức/ngữ cảnh nhận thức nào không?
- 19. Cách đánh giá một biểu thức toán học tùy chỉnh trong Python
- 20. Thuật toán tốt nhất để đánh giá biểu thức toán học?
- 21. Cụm từ thông dụng để nhận chuỗi giữa các dấu ngoặc đơn trong Javascript
- 22. Làm thế nào để định dạng một câu lệnh xác nhận python phù hợp với PEP8?
- 23. Java Regex cho phù hợp với chuỗi trích dẫn với dấu ngoặc kép thoát
- 24. Xóa văn bản trong dấu ngoặc đơn (dấu ngoặc đơn trong dấu ngoặc đơn)
- 25. Email Xác nhận biểu thức chính quy
- 26. Parse boolean số học bao gồm cả dấu ngoặc đơn với regex?
- 27. Ghép cặp dấu ngoặc nhọn, dấu ngoặc đơn và dấu ngoặc đơn
- 28. Trình thông dịch tùy chỉnh cho các biểu thức toán học
- 29. Cần biểu thức chính quy để xác nhận tên
- 30. JavaScript biểu thức thông thường - phù hợp với một loạt các số thập lục phân
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
* 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! :) –
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. –