Saya memiliki beberapa data yang terlihat seperti ini
john, dave, chris
rick, sam, bob
joe, milt, paul
Saya menggunakan regex ini untuk mencocokkan nama
/(\w.+?)(\r\n|\n|,)/
yang berfungsi untuk sebagian besar tetapi file berakhir tiba-tiba setelah kata terakhir yang berarti nilai terakhir tidak diakhiri \r\n
, \n
atau ,
diakhiri dengan EOF. Apakah ada cara untuk mencocokkan EOF di regex sehingga saya bisa memasangnya di pengelompokan kedua?
Jawaban:
Jawaban atas pertanyaan ini
\Z
membutuhkan waktu beberapa saat untuk memahaminya, tetapi berhasil sekarang. Perhatikan bahwa sebaliknya,\A
mencocokkan awal dari seluruh string (sebagai lawan^
dan$
mencocokkan awal dari satu baris).sumber
(\s*)\?>(\s*)\Z
... dan setelah beberapa penggalian lagi di sini adalah apa yang akan bekerja pada folder proyek :(\s*)\?>(\s*)(\n*)(\W)\Z
FYI: ini untuk mengganti semua tag php penutup dengan jeda baris di akhir file.\A
juga bekerja di Visual Studio temukan dan ganti. Seperti biasa, gunakan hal-hal seperti itu dengan hati-hati tetapi itu menyelamatkan saya dari banyak kesalahan manual begitu saya senang itu benar-benar akan melakukan hal yang benar.Scanner
kelas Java untuk membaca seluruh file sekaligus; jika saya gunakan\Z
sebagai pembatas, karakter baris baru di belakangnya dipangkas. Saat saya mengubah pembatas menjadi\z
, karakter baris baru di belakangnya dipertahankan. Sepertinya jawaban Martin Dorey juga berlaku untuk Java.EOF sebenarnya bukanlah sebuah karakter. Jika Anda memiliki string multi-baris, '$' akan cocok dengan akhir string serta akhir baris.
Di Perl dan rekan-rekannya,
\A
dan\Z
mencocokkan awal dan akhir string, sama sekali mengabaikan jeda baris.Ekstensi GNU untuk regex POSIX digunakan
\`
dan\'
untuk hal yang sama.sumber
Dalam Visual Studio, Anda dapat menemukan EOF suka begitu:
$(?![\r\n])
. Ini berfungsi apakah akhiran baris Anda CR, CRLF, atau hanya LF.Sebagai bonus, Anda dapat memastikan semua file kode Anda memiliki penanda baris baru akhir seperti:
Find What: (?<![\r\n])$(?![\r\n]) Replace With: \r\n Use Regular Expressions: checked Look at these file types: *.cs, *.cshtml, *.js
Bagaimana ini bekerja:
Temukan ujung garis (kecocokan lebar-nol) yang tidak didahului oleh CR atau LF, dan juga tidak diikuti oleh CR atau LF. Beberapa pemikiran akan menunjukkan kepada Anda mengapa ini berhasil!
Perhatikan bahwa Anda harus Mengganti Dengan karakter akhir baris yang Anda inginkan, baik itu CR, LF, atau CRLF.
sumber
Bandingkan perilaku \ Z yang disarankan Ryan dengan \ z:
perlre sez:
Terjemahan kasus uji ke dalam Ruby (1.8.7, 1.9.2) berlaku sama.
sumber
Apakah Anda benar-benar harus menangkap pemisah garis? Jika tidak, regex inilah yang Anda butuhkan:
/\w+/
Itu dengan asumsi semua substring yang ingin Anda cocokkan seluruhnya terdiri dari karakter kata, seperti dalam contoh Anda.
sumber
Mungkin coba $ (EOL / EOF) daripada (\ r \ n | \ n)?
/\"(.+?)\".+?(\w.+?)$/
sumber
Baru-baru ini saya mencari sesuatu seperti ini, tetapi untuk JavaScript.
Menempatkan ini di sini, sehingga siapa pun yang memiliki masalah yang sama bisa mendapatkan keuntungan
var matchEndOfInput = /$(?![\r\n])/gm;
Pada dasarnya ini akan cocok dengan akhir baris, yang tidak diikuti oleh carriage return atau karakter baris baru. Intinya ini sama dengan
\Z
tetapi untuk JavaScript.sumber
Dengan asumsi Anda menggunakan pengubah yang tepat yang memaksa untuk memperlakukan string secara keseluruhan (bukan baris demi baris - dan jika \ n berfungsi untuk Anda, Anda sedang menggunakannya), cukup tambahkan alternatif lain - akhir string: (\ r \ n | \ n |, | $)
sumber
/(\w.+?)(\r\n|\n|,|$)/
sumber