Saya ingin mencocokkan ekspresi reguler di seluruh kata.
Pada contoh berikut saya mencoba untuk mencocokkan s
atau season
tapi apa yang saya miliki pertandingan s
, e
, a
, o
dan n
.
[s|season]
Bagaimana cara membuat ekspresi reguler agar cocok dengan seluruh kata?
regex
expression
word
NMGod
sumber
sumber
(season|s)
sebagai gantinya.[season]
cocok salahs
,e
,a
,o
,n
.Jawaban:
Kurung dimaksudkan untuk kelas karakter, dan Anda benar-benar mencoba untuk mencocokkan salah satu dari:
s
,|
,s
(lagi),e
,a
,s
(lagi),o
dann
.Gunakan tanda kurung sebagai gantinya untuk pengelompokan:
atau grup non-penangkap:
Catatan: Grup non-tangkap memberi tahu mesin bahwa itu tidak perlu menyimpan pertandingan, sementara yang lain (grup penangkap perlu). Untuk barang kecil, entah berfungsi, untuk barang 'tugas berat', Anda mungkin ingin melihat dulu apakah Anda membutuhkan korek api atau tidak. Jika tidak, lebih baik gunakan grup non-capture untuk mengalokasikan lebih banyak memori untuk kalkulasi daripada menyimpan sesuatu yang tidak perlu Anda gunakan.
sumber
?:
dalam pengelompokan aliasnon-capturing
hanya mengatakan, bahwa Anda tidak dapat menggunakan ekspresi yang cocok dengan$1
,$2
dan seterusnya ... Jika Anda ingin ekspresi tidak cocok, yang Anda butuhkan adalah^
.(?! ... )
insead, artinya(?!s|season)
dalam kasus ini.Gunakan contoh online langsung ini untuk menguji pola Anda:
Tangkapan layar di atas diambil dari contoh langsung ini: https://regex101.com/r/cU5lC2/1
Mencocokkan seluruh kata pada baris perintah.
Saya akan menggunakan shell interaktif phpsh di Ubuntu 12.10 untuk mendemonstrasikan mesin regex PCRE melalui metode yang dikenal sebagai preg_match
Mulai phpsh, masukkan beberapa konten ke dalam variabel, cocokkan dengan kata.
Metode preg_match digunakan mesin PCRE dalam bahasa PHP untuk menganalisis variabel:
$content1
,$content2
dan$content3
dengan(\w)+
pola.$ content1 dan $ content2 mengandung setidaknya satu kata, $ content3 tidak.
Cocokkan kata tertentu pada baris perintah tanpa kata bountaries
Variabel
gun1
dangun2
berisi stringdart
ataufart
yang benar, tetapi gun3 berisidarty
dan masih cocok, itulah masalahnya. Jadi ke contoh selanjutnya.Cocokkan kata-kata tertentu pada baris perintah dengan batas kata:
Batas Kata dapat dicocokkan secara paksa
\b
, lihat:Gambar Visual Regex diperoleh dari http://jex.im/regulex dan https://github.com/JexCheng/regulex Contoh:
The
\b
menegaskan bahwa kita memiliki batas kata, memastikan "panah" cocok, tapi "DARTY" tidak.sumber
Saya menguji contoh di js. Solusi paling sederhana - cukup tambahkan kata yang Anda butuhkan di dalam / /:
Sekarang jika Anda membutuhkan kata khusus ini dengan batas-batas, bukan di dalam huruf-tanda lainnya. Kami menggunakan penanda b :
Kami juga memiliki metode exec () di js, yang mana yang mengembalikan hasil objek. Ini membantu fg untuk mendapatkan info tentang tempat / indeks kata kita.
Jika kita membutuhkan semua kata yang cocok dalam string / kalimat / teks, kita bisa menggunakan g modifier (pencocokan global):
Sekarang yang terakhir - saya tidak perlu 1 kata spesifik, tetapi beberapa di antaranya. Kami menggunakan | tanda, itu berarti pilihan / atau.
sumber
[ ]
mendefinisikan kelas karakter. Jadi setiap karakter yang Anda tetapkan di sana, akan cocok.[012]
akan cocok0
atau1
atau2
dan[0-2]
berperilaku sama.Yang Anda inginkan adalah pengelompokan untuk mendefinisikan pernyataan-atau. Menggunakan
(s|season)
untuk masalah Anda.Btw. kamu harus hati-hati. Karakter meta dalam ekspresi reguler (atau di dalam pengelompokan) berbeda dari kelas karakter. Kelas karakter seperti sub-bahasa.
[$A]
hanya akan cocok$
atauA
, tidak ada yang lain. Tidak ada jalan keluar di sini demi dolar.sumber