Saya sudah mencoba untuk membuat regex tertentu bekerja tetapi saya tidak bisa mendapatkannya untuk melakukan apa yang saya butuhkan.
Pada dasarnya, saya ingin mencari ROCKET. Regex harus cocok dengan ROCKET dalam huruf besar atau kecil, dan dengan atau tanpa tanda baca, tetapi tidak ketika bagian dari kata lain. Jadi, regex akan memicu salah satu dari ini:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
tetapi TIDAK memicu pada ROCKET ketika ditemukan dalam sesuatu seperti
Rocketeer
Sprocket
Saya sudah mencoba untuk memperbaikinya menggunakan generator regex online tetapi saya tidak bisa mencocokkannya dengan tepat.
Jawaban:
Saya sarankan untuk membookmark Referensi Cepat Ekspresi Reguler MSDN
Anda ingin mencapai kecocokan huruf besar-kecil untuk kata "roket" yang dikelilingi oleh karakter non-alfanumerik. Regex yang berfungsi adalah:
\W*((?i)rocket(?-i))\W*
Yang akan dilakukan adalah mencari nol atau lebih (*) karakter non-alfanumerik (\ W), diikuti oleh case rocket versi ((? I) rocket (??)) Yang tidak sensitif, diikuti lagi dengan nol atau lebih ( *) karakter non-alfanumerik (\ W). Tanda kurung tambahan di sekitar istilah pencocokan roket memberikan kecocokan ke grup terpisah. Dengan demikian kata roket akan berada dalam grup pertandingan 1.
UPDATE 1: Matt mengatakan dalam komentar bahwa regex ini akan digunakan dengan python. Python memiliki sintaks yang sedikit berbeda. Untuk mencapai hasil yang sama dengan python, gunakan regex ini dan berikan
re.IGNORECASE
opsi kecompile
ataumatch
fungsi.\W*(rocket)\W*
Pada Regex101 ini dapat disimulasikan dengan memasukkan "i" di kotak teks di sebelah input regex.
UPDATE 2 Ismael telah menyebutkan, bahwa regex tidak cukup benar, karena mungkin cocok dengan "1rocket1". Dia memposting solusi yang jauh lebih baik, yaitu
(?:^|\W)rocket(?:$|\W)
sumber
\W*(rocket)\W*
korek apilrocketl
. Seharusnya(?:^|\W)(rocket)(?:$|\W)
(tanpa*
dan Anda harus memeriksa apakah itu cocok dengan awal dan / atau akhir string).Saya pikir pandangan ke depan terlalu banyak dalam kasus ini, dan Anda akan lebih baik menggunakan batas kata dengan
ignorecase
opsi,\brocket\b
Dengan kata lain, dengan python:
sumber
Dengan
grep
dansed
, Anda bisa menggunakannya\<rocket\>
. Dengangrep
, yang-i
pilihan akan membuat case-sensitive ( i gnore kasus):Saya tidak tahu cara apa pun untuk membuat semua
sed
regex tidak peka terhadap huruf besar-kecil, tetapi selalu ada cara manusia gua:sumber
Gunakan opsi Cari hanya untuk seluruh kata.
Sejauh tanda baca, Anda tidak bisa menjawabnya sampai Anda tahu rasanya.
Itu utas yang sangat lama, jadi diposting untuk seseorang yang mungkin berkunjung dengan kebutuhan, nanti. Orang yang memulai utas mungkin telah pindah ke hal lain ... Tidak?
sumber
whole words only option
menggunakangrep
atauphp
? Maaf, tetapi jawaban Anda tidak memberikan nilai tambah dibandingkan dengan jawaban lainnya.