Regex apa yang cocok dengan setiap karakter kecuali koma ',' atau semi-colon ';'?

345

Apakah mungkin untuk mendefinisikan regex yang akan cocok dengan setiap karakter kecuali karakter tertentu atau serangkaian karakter?

Pada dasarnya, saya ingin membagi string dengan koma (,) atau semi-colon (;). Jadi saya berpikir untuk melakukannya dengan regex yang akan cocok dengan semuanya sampai bertemu koma atau titik koma.

Kshitij Saxena -KJ-
sumber

Jawaban:

474
[^,;]+         

Anda belum menentukan implementasi regex yang Anda gunakan. Sebagian besar dari mereka memiliki Splitmetode yang mengambil pembatas dan membaginya. Anda mungkin ingin menggunakannya dengan ^kelas karakter "normal" (tanpa ):

[,;]+
Mehrdad Afshari
sumber
10
Dan pertanyaannya tidak menentukan apakah pemisah yang berdekatan dibolehkan, sehingga jejak '+' sedikit meragukan.
Jonathan Leffler
Mendapat kesalahan hanya untuk titik koma - regexp yang tidak dikenali memenuhi akhir file
Jaswinder
Saya memiliki persyaratan serupa di mana saya ingin menghindari titik koma dan koma pada akhirnya saya mencoba banyak tetapi tidak berhasil di bawah ini adalah Regex saya menggunakan 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; Yah itu valid jika saya gunakan, dan; di antara tetapi gagal pada akhirnya untuk vliadate.
Harry
87

Gunakan kelas karakter. Kelas karakter yang dimulai dengan caret akan cocok dengan apa pun yang tidak ada di kelas.

[^,;]
Thom Smith
sumber
2
Lebih lanjut tentang kelas karakter yang dinegasikan
HEX
Saya memiliki persyaratan serupa di mana saya ingin menghindari titik koma dan koma pada akhirnya saya mencoba banyak tetapi tidak berhasil di bawah ini adalah Regex saya menggunakan 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; Yah itu valid jika saya gunakan, dan; di antara tetapi gagal pada akhirnya untuk vliadate.
Harry
2

Gunakan ini:

([^,;]*[,;])*
NawaMan
sumber
5
Itu membutuhkan koma atau semi-kolon sebagai pembatas bidang, bukan sebagai pemisah bidang. Perbedaan itu penting di akhir 'garis' (atau struktur rekaman yang dipindai); biasanya, Anda tidak ingin memaksakan koma atau semi-kolon setelah bidang terakhir. Jika mesin regex Anda cukup kuat, Anda dapat menggunakan ' (?:([^,;]*)(?:[^,;]|$))' (PCRE dengan tanda kurung yang tidak menangkap). Alternatif koma atau semi-kolon setelah bidang, atau akhir catatan, membuat semuanya bekerja lebih baik. Juga pertimbangkan apakah bidang kosong diizinkan.
Jonathan Leffler
1
Akhirnya, Anda harus khawatir tentang apa yang sebenarnya dikembalikan oleh tangkapan - apakah Anda benar-benar ingin pemisah disertakan, dan jika ada 10 bidang pada satu garis, berapa banyak dari mereka yang dikembalikan oleh notasi tangkapan.
Jonathan Leffler
1
Anda benar tentang semua itu tetapi alasan saya tidak menyatukan hal itu dalam jawaban saya adalah karena saya tidak tahu bahasa / perpustakaan RegEx apa yang ditanyakan si penanya. Dia mungkin menggunakan "GREP". Ngomong-ngomong, saya menghargai Anda menambahkan komentar itu untuk menjernihkan semuanya untuknya. : D
NawaMan