2012-09-29 40 views
5

Tôi đang phân tích cú pháp thông qua tài liệu và muốn chia nhỏ nó bằng cách sử dụng preg_split() của php.Regex cho chuỗi giữa hai biểu tượng nhưng không phải là ba của biểu tượng đó

Tài liệu này được tổ chức thành các phần với các tiêu đề của:

==Section Title== 

Vấn đề là mỗi phần có phần phụ với tiêu đề của:

===Subsection Title=== 

Câu hỏi: Có cách nào để sử dụng regex để phân tích cú pháp thông qua tài liệu cho những thứ nằm giữa hai dấu hiệu bằng nhau nhưng không phải giữa ba dấu bằng nhau?

Cảm ơn!

P.S. Tôi đang cố gắng học regex, nhưng tôi vẫn thấy nó khá khó hiểu!

Trả lời

6

Đây là một loại nên làm việc:

(?<!=)==(?!=)(.*)(?<!=)==(?!=) 

Cách hoạt động:

Các mô hình (?<!=)==(?!=) xuất hiện hai lần (bắt đầu và kết thúc). Nó khớp với hai dấu bằng không được đặt trước hoặc theo dấu bằng khác bằng (?<!=) (âm lookbehind) và (?!=) (âm lookahead). Mục đích của việc này là để đảm bảo rằng bạn không vô tình khớp hai dấu bằng là một phần của một nhóm lớn hơn chẳng hạn như ===.

(.*) ở giữa phù hợp với bất kỳ văn bản nào tồn tại giữa hai cặp ==.

+0

tôi nghĩ rằng bạn cần '^' và '$ 'xung quanh nó. Nếu không, nó sẽ chỉ đơn giản là khớp với một phần của dòng thứ hai từ ký tự thứ 2 (. * Sẽ gobble lên đầu tiên của 3 '=' ký tự bên phải). – Barmar

+0

Cảm ơn bạn !!! Tôi đã phải thoát khỏi = trong những cái nhìn tiêu cực, nhưng sau đó nó có vẻ làm việc. – OneThreeSeven

+0

@Barmar: Rất đúng, tôi đã sửa lại regex để nó không có vấn đề này. Cảm ơn vì đã chú ý. – Jon

3

Tôi không chắc liệu bạn có lo lắng về các tiêu đề đó hay phân tích tất cả WikiCreole, nhưng các thư viện có sẵn để phân tích cú pháp WikiCreole trong PHP.

http://wiki.wikicreole.org/Libraries

+0

thật buồn cười khi bạn biết mình đang cố gắng làm gì =) – OneThreeSeven

+0

Bạn có thể cho biết ví dụ về cách bạn muốn làm điều này với thư viện không? –

+0

@BenLee, Xin lỗi, nhưng tôi không thể. Tôi chưa bao giờ sử dụng nó. – Brad

1

Giả sử không có bất kỳ khoảng trắng ở đầu/cuối dòng:

^==[^=]+==$ 
+0

Đảm bảo và chỉ định chế độ nhiều dòng: ''/^== [^ =] + ==/m'' –

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