Saya mencari pola yang cocok dengan semuanya sampai kemunculan pertama karakter tertentu, katakanlah ";" - titik koma .
Saya menulis ini:
/^(.*);/
Tetapi sebenarnya cocok dengan semuanya (termasuk titik koma) sampai kemunculan terakhir titik koma.
/^(.*?);/
seharusnya juga berfungsi (ini disebut non-serakah ), tetapi jawaban yang diberikan[^;]*
lebih baik.\w+(?!([^]+;)|;)
tetapi ini tidak mengapa?.+(?!([^]+;)|;)
Jawaban:
Kamu butuh
Ini
[^;]
adalah kelas karakter , cocok dengan semua kecuali titik koma.Untuk mengutip halaman
perlre
manual:Ini harus bekerja di sebagian besar dialek regex.
sumber
foo=bar;baz=bax;bab=baf
dan cocokbab=baf
bahkan tidak ada;
apa yang saya butuhkan. Tidak yakin mengapa ini bekerja meskipun jika spec mengatakan cocok dengan semua kecuali simbol target ...Akan;
kerja?
Ini
?
adalah operator yang malas, sehingga regex meraih sesedikit mungkin sebelum mencocokkan;
.sumber
/^[^;]*/
[^;] Mengatakan cocok dengan apa pun kecuali titik koma. Kurung kuadrat adalah operator pencocokan himpunan, pada dasarnya cocok dengan karakter apa pun dalam himpunan karakter ini,
^
pada awalnya menjadikannya kecocokan terbalik, jadi cocokkan apa pun yang tidak ada dalam himpunan ini.sumber
Mencoba
/[^;]*/
Google
regex character classes
untuk detailnya.sumber
Mencoba
/[^;]*/
Itu kelas karakter negating .
sumber
contoh teks:
Jika misalnya kita memiliki contoh teks di atas, regex
/(.*?\;)/
akan memberi Anda segalanya sampai kemunculan pertama titik koma (;
), termasuk titik koma:"this is a test sentence;"
sumber
;
char karena itu bukan regex karakter khusus. Pengelompokan()
tidak diperlukan juga. Anda dapat pergi dengan/.*?;/
?
karakter membuat pertandingan menjadi malas (cocok sesering mungkin). Pikirkan karakter pencocokan regex hingga titik koma pertama, maka itu tidak berjalan lebih jauh karena menyerah (malas;))ini bukan solusi regex, tetapi sesuatu yang cukup sederhana untuk deskripsi masalah Anda. Pisahkan string Anda dan dapatkan item pertama dari array Anda.
keluaran
sumber
Ini sangat membantu bagi saya karena saya mencoba mencari cara untuk mencocokkan semua karakter dalam tag xml termasuk atribut. Saya mengalami masalah "cocokkan semuanya sampai akhir" dengan:
tetapi dapat menyelesaikan masalah dengan:
setelah membaca posting ini. Terima kasih semuanya.
sumber
<!DOCTYPE>
tag. Karena parser tidak dapat menanganinya.Ini akan cocok dengan kejadian pertama hanya di setiap string dan akan mengabaikan kejadian berikutnya.
sumber
"/^([^\/]*)\/$/"
bekerja untuk saya, untuk mendapatkan hanya "folder" teratas dari array seperti:sumber
Benar-benar agak sedih karena tidak ada yang memberi Anda jawaban yang benar ....
Di regex,? membuatnya tidak serakah. Secara default regex akan cocok sebanyak mungkin (serakah)
Cukup tambahkan? dan itu akan menjadi serakah dan serasi sesedikit mungkin!
Semoga sukses, semoga bisa membantu.
sumber
Saya menemukan itu
bekerja dengan baik.
',' menjadi "pembatas" di sini.
sumber