Regex nào sẽ khớp với mọi ký tự ngoại trừ dấu phẩy ',' hoặc dấu chấm phẩy ';'?


343

Có thể xác định một regex sẽ khớp với mọi ký tự ngoại trừ một ký tự hoặc bộ ký tự được xác định nhất định không?

Về cơ bản, tôi muốn tách một chuỗi bằng dấu phẩy (,) hoặc dấu chấm phẩy (;). Vì vậy, tôi đã nghĩ đến việc thực hiện nó với một biểu thức chính quy phù hợp với mọi thứ cho đến khi nó gặp phải dấu phẩy hoặc dấu chấm phẩy.

Câu trả lời:


471
[^,;]+         

Bạn chưa chỉ định triển khai regex bạn đang sử dụng. Hầu hết trong số họ có một Splitphương thức lấy dấu phân cách và phân chia bởi chúng. Bạn có thể muốn sử dụng cái đó với ^lớp ký tự "bình thường" (không có ):

[,;]+

10
Và câu hỏi không xác định liệu các dấu phân cách liền kề có được phép hay không, do đó, dấu '+' hơi đáng ngờ.
Jonathan Leffler

Chỉ nhận được một lỗi cho dấu chấm
phẩy-- regex bị hủy hoàn toàn

Tôi đã có một yêu cầu tương tự khi tôi muốn tránh dấu chấm phẩy và dấu phẩy cuối cùng tôi đã thử rất nhiều nhưng không thành công dưới đây là Regex tôi đang sử dụng const regexDomain = / ^ (?: [A-Za-z0-9] (?: [A-Za-z0-9 -] {0,61} [A-Za-z0-9])? \.) + [A-Za-z0-9] [A-Za-z0-9 -] { 0,61} [A-Za-z0-9] / g; Vâng, nó xác nhận nếu tôi sử dụng, và; ở giữa nhưng thất bại ở cuối vliadate.
Harry

86

Sử dụng các lớp nhân vật. Một lớp nhân vật bắt đầu bằng dấu mũ sẽ phù hợp với bất cứ thứ gì không có trong lớp.

[^,;]


Tôi đã có một yêu cầu tương tự khi tôi muốn tránh dấu chấm phẩy và dấu phẩy cuối cùng tôi đã thử rất nhiều nhưng không thành công dưới đây là Regex tôi đang sử dụng const regexDomain = / ^ (?: [A-Za-z0-9] (?: [A-Za-z0-9 -] {0,61} [A-Za-z0-9])? \.) + [A-Za-z0-9] [A-Za-z0-9 -] { 0,61} [A-Za-z0-9] / g; Vâng, nó xác nhận nếu tôi sử dụng, và; ở giữa nhưng thất bại ở cuối vliadate.
Harry


2

Dùng cái này:

([^,;]*[,;])*

5
Điều đó đòi hỏi dấu phẩy hoặc dấu chấm phẩy như một dấu phân cách trường, chứ không phải là dấu phân cách trường. Sự khác biệt quan trọng ở phần cuối của một 'dòng' (hoặc cấu trúc bản ghi được quét khác); thông thường, bạn không muốn nhấn mạnh vào dấu phẩy hoặc dấu chấm phẩy sau trường cuối cùng. Nếu công cụ regex của bạn đủ mạnh, bạn có thể sử dụng ' (?:([^,;]*)(?:[^,;]|$))' (PCRE với dấu ngoặc đơn không bắt). Các lựa chọn thay thế của dấu phẩy hoặc dấu chấm phẩy sau trường hoặc kết thúc bản ghi sẽ giúp mọi thứ hoạt động tốt hơn. Cũng xem xét liệu các trường trống được cho phép.
Jonathan Leffler

1
Cuối cùng, bạn phải lo lắng về những gì thực sự được trả lại bởi các ảnh chụp - bạn có thực sự muốn các dấu phân cách được bao gồm không, và nếu có 10 trường trên một dòng, có bao nhiêu trong số chúng được trả về bởi ký hiệu chụp.
Jonathan Leffler

1
Bạn đúng về tất cả những điều đó nhưng lý do tôi không hòa hợp những điều đó trong câu trả lời của tôi là tôi không biết ngôn ngữ / thư viện nào của RegEx mà người hỏi đang hỏi. Anh ta có thể đang sử dụng "GREP". Dù sao, tôi đánh giá cao bạn thêm những bình luận đó để làm rõ mọi thứ cho anh ấy. : Đ
NawaMan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.