2010-09-14 19 views
10

Tôi có một regex trông như thế nàykhông gì: làm trong regex

/^(?:\w+\s)*(\w+)$*/ 

các ?: là gì?

+1

Ở đó để gây nhầm lẫn cho mọi người. – JAL

+1

bản sao có thể có của [Nhóm không chụp? (?:)] (http://stackoverflow.com/questions/3512471/non-capturing-group) – HamZa

Trả lời

17

Nó chỉ ra rằng subpattern là một subpattern không chụp. Điều đó có nghĩa là bất cứ điều gì được xuất hiện trong (?:\w+\s), mặc dù nó được đính kèm bởi () nó sẽ không xuất hiện trong danh sách các kết quả phù hợp, chỉ (\w+) sẽ.

Bạn vẫn đang tìm kiếm một mẫu cụ thể (trong trường hợp này, một ký tự trắng khoảng sau ít nhất một từ), nhưng bạn không quan tâm những gì thực sự phù hợp.

+1

+1 thông tin thêm: http://www.regular-expressions.info/brackets.html –

2

Có nghĩa là chỉ nhóm nhưng không nhớ phần được nhóm.

Theo mặc định () yêu cầu công cụ regex nhớ phần của chuỗi khớp với mẫu giữa nó. Nhưng đôi khi chúng tôi chỉ muốn nhóm một mẫu mà không kích hoạt bộ nhớ regex, để làm điều đó chúng tôi sử dụng (?: thay cho (

3

Ngoài các câu trả lời tuyệt vời được cung cấp, tính hữu dụng của nó cũng là đơn giản hóa mã cần thiết để trích xuất nhóm kết quả phù hợp. Ví dụ: nhóm (\ w +) của bạn được gọi là nhóm 1 mà không phải lo ngại về bất kỳ nhóm nào xuất hiện trước nhóm. Điều này có thể cải thiện khả năng bảo trì mã của bạn.