2010-03-08 45 views
20

Làm thế nào tôi có thể phù hợp với tất cả các nhân vật giữa 2 ký tự quy định, nói " " -> từ sdfsf " 12asdf " sdfregex tìm ký tự giữa ""

Tôi muốn nhận 12asdf chỉ.

+1

bạn được gì hy vọng sẽ nhận được? Nó không trả lại khoảng trắng hàng đầu? Hiển thị cho chúng tôi regex bạn đang sử dụng và đặt kết quả ví dụ của bạn trong một khối mã, xin vui lòng. – Robusto

Trả lời

61

Bạn có thể sử dụng mẫu sau để có được tất cả mọi thứ giữa " ", bao gồm cả hàng đầu và dấu không gian trắng:

"(.*?)" 

hoặc

"([^"]*)" 

Nếu bạn muốn chụp tất cả mọi thứ giữa "" không bao gồm không gian màu trắng phía trước và phía sau bạn có thể làm:

"\s*(.*?)\s*" 

hoặc

"\s*([^"]*)\s*" 
+0

Đồng ý. Hãy chắc chắn tìm kiếm bất kỳ thứ gì bạn có thể tìm thấy trên các biểu thức "không tham lam" (so với "tham lam"). Nên là một điều thú vị nếu bạn chưa biết. Và nó chắc chắn sẽ làm cho cuộc sống của bạn với regexes dễ dàng hơn nếu bạn biết sự khác biệt. – exhuma

0

Bạn có thể sử dụng preg_match(/"([^"]*)"/,$input,$matches);. $matches[1] sẽ có những gì bạn muốn.

5

tôi đề nghị bạn sử dụng

(?<=")(?:\\.|[^"\\])*(?=") 

này sẽ phù hợp chỉ là những gì giữa dấu ngoặc kép (không có dấu ngoặc kép tự) và cũng có thể xử lý các dấu ngoặc kép trốn bên trong chuỗi của bạn một cách chính xác.

Vì vậy, trong "She said, \"Hi!\"", nó sẽ khớp với She said, \"Hi!\".

Nếu bạn đang sử dụng Javascript hoặc Ruby (mà bạn đã không đề cập) và do đó không thể sử dụng lookbehind, sử dụng

"((?:\\.|[^"\\])*)" 

và làm việc với nhóm chụp không. 1.

+0

Điều đó không xử lý các trích dẫn thoát cho tôi hoặc trên trang này https://regex101.com/ – Don

+0

@Don: Bạn có thể cung cấp liên kết đến regex không hoạt động (nhấp vào Lưu regex và đăng liên kết đó) không? –

-1
[^"].*[^"] 

Nếu bạn nhập: "Elie", nó sẽ cung cấp Elie (lưu ý: không có dấu ngoặc kép)

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