Bạn có thể sử dụng ranh giới từ gần @
với một lookbehind âm để kiểm tra xem chúng ta đang ở đầu của một chuỗi hoặc ngay sau khi một khoảng trắng, sau đó kiểm tra xem biểu tượng 1 không phải là bên trong lớp không mong muốn [^\s\-_.]
:
(?<=^|\s)[^\s\-_.]\w*(?:[-+.]\w+)*\[email protected]\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*
Xem demo
Danh sách các trận đấu:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Ghi chú thêm về cách sử dụng và ký hiệu thay thế
Lưu ý rằng nó là thực hành tốt nhất để sử dụng càng ít thoát chars càng tốt trong regex, vì vậy, các [^\s\-_.]
có thể được viết như [^\s_.-]
, với dấu nối ở phần cuối của các nhân vật lớp vẫn biểu thị dấu gạch nối theo nghĩa đen, không phải là một phạm vi. Ngoài ra, nếu bạn có kế hoạch để sử dụng các mô hình trong công cụ regex khác, bạn có thể thấy khó khăn với sự làm thay đổi lookbehind, và sau đó bạn có thể thay thế (?<=\s|^)
với tương đương (?<!\S)
. Xem this regex:
(?<!\S)[^\s_.-]\w*(?:[-+.]\w+)*\[email protected]\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*
Và cuối cùng nhưng không kém, nếu bạn cần phải sử dụng nó trong JavaScript hoặc các ngôn ngữ khác không hỗ trợ lookarounds, thay thế các (?<!\S)
/(?<=\s|^)
với một (không) chụp nhóm (\s|^)
, quấn mô hình email toàn phần với một tập hợp các dấu ngoặc chụp và sử dụng ngôn ngữ có nghĩa là để lấy nội dung Nhóm 1:
(\s|^)([^\s_.-]\w*(?:[-+.]\w+)*\[email protected]\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)
Xem regex demo.
Nguồn
2015-05-14 08:39:52
thông minh sử dụng các '\ b' đó;) –