Ekspresi Reguler untuk mencocokkan string yang dimulai dengan "stop"

99

Bagaimana cara membuat ekspresi reguler untuk mencocokkan kata di awal string. Kami mencari kecocokan stopdi awal string dan apa pun bisa mengikutinya.

Misalnya ekspresi harus cocok:

stop
stop random
stopping

Terima kasih.

Brad Mace
sumber

Jawaban:

187

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.)

Vinko Vrsalovic
sumber
27
1 untuk menggeneralisasi jawaban Anda. Saya ingin melihat lebih banyak tentang ini di Stack Overflow. Menjadikannya sebagai sumber belajar yang lebih baik menurut saya.
Jim
Bagaimana membuatnya menjadi case insensitive yaitu match Stop atau stop atau sTop?
Elton Garcia de Santana
Tergantung pada bahasa Anda ... Kompatibel dengan Perl dapat menggunakan pengubah I. / regex / i .NET RegexOptions.IgnoreCase dan seterusnya
Vinko Vrsalovic
Jangan lupa ^stop\b, yang akan mengizinkan batasan apa pun, termasuk akhir garis
Fisikawan Gila
80

Coba ini:

/^stop.*$/

Penjelasan:

  • / charachters membatasi ekspresi reguler (yaitu, mereka bukan bagian dari Regex itu sendiri)
  • ^ berarti cocok di awal baris
  • . diikuti oleh * berarti cocok dengan karakter apa pun (.), berapa kali pun (*)
  • $ berarti di akhir baris

Jika Anda ingin menerapkan perhentian yang diikuti oleh spasi, Anda dapat memodifikasi RegEx seperti ini:

/^stop\s+.*$/
  • \ s berarti semua karakter spasi
  • + mengikuti \ s berarti harus ada setidaknya satu karakter spasi setelah kata stop

Catatan: Perlu diingat juga bahwa RegEx di atas mengharuskan kata stop diikuti oleh spasi! Jadi tidak cocok dengan baris yang hanya berisi: stop

Mike Dinescu
sumber
Tidak semua bahasa menggunakan garis miring ke depan untuk membatasi ekspresi reguler.
JAB
1
@Cat Megex: Itulah mengapa saya menambahkan penjelasan. Jika bahasa Anda menggunakan sesuatu yang lain untuk membatasi regex, ganti / dengan karakter yang tepat
Mike Dinescu
1
@Mez ya, dan redundansi seperti itu meningkatkan kejelasan dan kinerja rexegg.com/regex-optimizations.html#anchors
MarredCheese
29

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

Kata sampai akhir string

Atau jika Anda ingin mencocokkan kata dalam string gunakan \bstop[a-zA-Z]*- hanya kata yang dimulai dengan stop

Hanya kata-kata yang dimulai dengan berhenti

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

Waxo
sumber
20

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)

Sedat Kilinc
sumber
8
/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

Mez
sumber
2
Ini akan cocok dengan "jangan berhenti pergi"
Alex B
1
Ini tidak akan cocok dengan stop123 atau stop ,.
lostintranslation
7

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
Alex B
sumber
0

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 .

Robert Elwell
sumber
0

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.

Manisha Chaurasia
sumber
1
Bisakah Anda tidak menggunakan saja "^stop"?
Stephen Rauch
Tergantung. Saat berbicara dalam istilah sintaks java, kita dapat menggunakan objek Pattern dan Matcher untuk menggunakan regex atau menggunakan metode .matches () langsung dengan objek String. Mereka berbeda dalam hasil sebagai berikut: 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
Manisha Chaurasia
1
Ini cocok hanya jika kata di awal baris. Jika kata yang dimulai dengan "stop" berada di tengah baris atau di akhir, ekspresi reguler ini tidak akan cocok. @StephenRauch jika Anda menghilangkan [az] * Anda tidak akan mendapatkan kata-kata seperti "berhenti" secara keseluruhan. Dalam kasus "berhenti" Anda mendapatkan "berhenti" dan "ping" akan hilang.
Sedat Kilinc