Bagaimana cara membuat ekspresi reguler untuk mencocokkan kata di awal string. Kami mencari kecocokan stop
di awal string dan apa pun bisa mengikutinya.
Misalnya ekspresi harus cocok:
stop
stop random
stopping
Terima kasih.
Jawaban:
Jika Anda ingin mencocokkan hanya baris yang dimulai dengan penggunaan stop
^stop
Jika Anda ingin mencocokkan baris yang diawali dengan kata berhenti diikuti dengan spasi
^stop\s
Atau, jika Anda ingin mencocokkan baris yang dimulai dengan kata berhenti tetapi diikuti dengan spasi atau karakter non-kata lainnya yang dapat Anda gunakan (rasa regex Anda mengizinkan)
^stop\W
Di sisi lain, kata berikut cocok dengan kata di awal string pada sebagian besar ragam ekspresi reguler (dalam ragam ini \ w cocok dengan kebalikan dari \ W)
^\w
Jika rasa Anda tidak memiliki pintasan \ w, Anda dapat menggunakan
^[a-zA-Z0-9]+
Berhati-hatilah karena idiom kedua ini hanya akan mencocokkan huruf dan angka, tidak ada simbol apapun.
Periksa manual ragam regex Anda untuk mengetahui pintasan apa yang diizinkan dan apa yang cocok dengannya (dan bagaimana cara menangani Unicode.)
^stop\b
, yang akan mengizinkan batasan apa pun, termasuk akhir garis
Coba ini:
/^stop.*$/
Penjelasan:
Jika Anda ingin menerapkan perhentian yang diikuti oleh spasi, Anda dapat memodifikasi RegEx seperti ini:
/^stop\s+.*$/
Catatan: Perlu diingat juga bahwa RegEx di atas mengharuskan kata stop diikuti oleh spasi! Jadi tidak cocok dengan baris yang hanya berisi: stop
Jika Anda ingin mencocokkan apa pun setelah sebuah kata berhenti dan tidak hanya di awal baris Anda dapat menggunakan: \bstop.*\b
- kata diikuti oleh baris
Atau jika Anda ingin mencocokkan kata dalam string gunakan \bstop[a-zA-Z]*
- hanya kata yang dimulai dengan stop
Atau awal baris dengan berhenti ^stop[a-zA-Z]*
untuk kata saja - hanya kata pertama
Seluruh baris ^stop.*
- baris pertama dari string saja
Dan jika Anda ingin mencocokkan setiap string yang dimulai dengan stop termasuk baris baru, gunakan: /^stop.*/s
- string multiline dimulai dengan stop
Seperti yang dikatakan @SharadHolani. Ini tidak akan cocok dengan setiap kata yang diawali dengan " stop "
. Hanya jika di awal baris seperti " berhenti berjalan ". @Waxo memberikan jawaban yang benar:
Satu ini sedikit lebih baik, jika Anda ingin mencocokkan setiap kata yang dimulai dengan " berhenti " dan berisi apa-apa kecuali huruf dari A sampai Z .
\bstop[a-zA-Z]*\b
Ini cocok untuk semua
berhenti (1)
berhenti acak (2)
berhenti (3)
ingin berhenti (4)
tolong berhenti (5)
Tapi
/^stop[a-zA-Z]*/
hanya akan cocok dengan (1) sampai (3), tetapi tidak (4) & (5)
/stop([a-zA-Z])+/
Akan cocok dengan kata berhenti apa pun (berhenti, berhenti, berhenti, dll)
Namun, jika Anda hanya ingin mencocokkan "berhenti" di awal string
/^stop/
akan melakukan: D
Jika Anda ingin mencocokkan apa pun yang dimulai dengan "stop" termasuk "stop going", "stop" dan "stopping" gunakan:
^stop
Jika Anda ingin mencocokkan kata berhenti diikuti dengan apa pun seperti dalam "berhenti pergi", "hentikan ini", tetapi bukan "berhenti" dan bukan "berhenti" gunakan:
^stop\W
Saya menyarankan agar pendekatan ekspresi reguler sederhana untuk masalah ini. Ada terlalu banyak kata yang merupakan substring dari kata-kata lain yang tidak berhubungan, dan Anda mungkin akan membuat diri Anda gila karena mencoba terlalu banyak mengadaptasi solusi sederhana yang sudah disediakan.
Anda memerlukan setidaknya algoritme stemming yang naif (coba Porter stemmer; ada kode gratis yang tersedia di sebagian besar bahasa) untuk memproses teks terlebih dahulu. Simpan teks yang telah diproses ini dan teks yang telah diproses dalam dua larik terpisah spasi. Pastikan setiap karakter non-alfabet juga mendapatkan indeksnya sendiri dalam larik ini. Apa pun daftar kata yang Anda filter, akhiri juga.
Langkah selanjutnya adalah menemukan indeks array yang cocok dengan daftar kata 'stop' bertangkai Anda. Hapus mereka dari array yang belum diproses, dan kemudian bergabung kembali di spasi.
Ini hanya sedikit lebih rumit, tetapi akan menjadi pendekatan yang jauh lebih dapat diandalkan. Jika Anda memiliki keraguan tentang nilai pendekatan yang lebih berorientasi NLP, Anda mungkin ingin melakukan beberapa penelitian tentang kesalahan-kesalahan yang clbuttic .
Jika Anda ingin kata diawali dengan "stop", Anda dapat menggunakan pola berikut. "^ berhenti. *"
Ini akan mencocokkan kata yang dimulai dengan berhenti diikuti oleh apa pun.
"^stop"
?
code
String line = "stopped";
String pattern = "^stop";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
System.out.println(m.find( )); //prints true
System.out.println(line.matches(pattern)); //prints false