2010-01-15 57 views
9

Giả sử tôi có chuỗi sau:Regex chỉ xuất hiện lần đầu tiên?

đây là thử nghiệm vì mục đích thử nghiệm . Đây chỉ là một thử nghiệm. Kết thúc.

và tôi muốn chọn this is a testthis is only a test. Tôi cần phải làm gì trên thế giới?

Các Regex sau tôi cố gắng mang lại một kết quả ngốc nghếch:

this(.*)test (Tôi cũng muốn nắm bắt những gì là giữa nó)

lợi nhuận this is a test for the sake of testing. this is only a test

Nó có vẻ như điều này có lẽ một cái gì đó dễ dàng tôi' m quên.

Trả lời

25

Regex có nghĩa là tham lam nó sẽ thu thập nhiều ký tự khi có thể rơi vào trận đấu .*. Để làm cho nó không tham lam thử:

this(.*?)test

Các modifier ? sẽ làm cho nó chụp càng ít nhân vật càng tốt trong trận đấu.

+0

Cảm ơn ... đó là những gì tôi nghĩ. Tôi đã thử nghiệm trên một thử nghiệm regex và nó hoạt động. vì vậy các ứng dụng (EditPlus) tôi đang sử dụng để làm một số tìm và thay thế ma thuật dường như không nhận ra? định lượng. –

+0

Theo câu trả lời của tôi, bạn có thể không nhận được kết quả hoàn hảo nếu "điều này" và "thử nghiệm" được nhúng trong các từ khác. Hãy xem xét xem xét nó, nếu đó có thể là một vấn đề. –

3

* là một bộ định lượng tham lam. Điều đó có nghĩa là nó khớp với càng nhiều càng tốt, tức là những gì bạn đang thấy. Tùy thuộc vào sự hỗ trợ ngôn ngữ cụ thể cho regex, bạn sẽ cần phải tìm một số lượng không tham lam. Thông thường, đây là dấu chấm hỏi, như sau: *?. Điều đó có nghĩa là nó sẽ ngừng sử dụng các chữ cái ngay khi phần còn lại của regex có thể được thỏa mãn.

There is a good explanation of greediness here.

8

Andy E và Ipsquiggle có ý tưởng đúng, nhưng tôi muốn chỉ ra rằng bạn có thể muốn thêm một sự khẳng định ranh giới từ, có nghĩa là bạn không muốn để đối phó với những từ mà có "này" hoặc "kiểm tra" trong họ - chỉ có các từ của chính họ. Trong Perl và tương tự được thực hiện với dấu "\ b".

Vì vậy, this(.*?)test sẽ khớp với "cây tật lê là lớn nhất", mà bạn có thể không muốn.

Các mô hình bạn muốn là một cái gì đó như thế này: \bthis\b(.*?)\btest\b

+0

+1, chắc chắn có điều đáng suy nghĩ về –

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