Regex untuk string berisi?

114

Apa regex untuk sekadar memeriksa apakah sebuah string berisi kata tertentu (mis. 'Test')? Saya telah melakukan beberapa googling tetapi tidak bisa mendapatkan contoh langsung dari ekspresi reguler seperti itu. Ini untuk skrip build tetapi tidak ada hubungannya dengan bahasa pemrograman tertentu.

GurdeepS
sumber

Jawaban:

78

Dengan asumsi ragam regex gaya PCRE biasa:

Jika Anda ingin memeriksa untuk itu sebagai , kata penuh tunggal , itu \bTest\b, dengan bendera yang tepat untuk kasus ketidakpekaan jika diinginkan dan pembatas untuk bahasa pemrograman Anda. \bmewakili "batas kata", yaitu titik di antara karakter di mana sebuah kata dapat dianggap sebagai awal atau akhir. Misalnya, karena spasi digunakan untuk memisahkan kata, akan ada batas kata di kedua sisi spasi.

Jika Anda ingin memeriksanya sebagai bagian dari kata , hanya saja Test, dengan flag yang sesuai untuk case insensitivity. Perhatikan bahwa biasanya, metode "substring" khusus cenderung lebih cepat dalam kasus ini, karena menghilangkan overhead penguraian regex.

Michael Madsen
sumber
1
" \bmewakili" batas kata ", yaitu sesuatu yang memisahkan dua kata (misalnya spasi)." \btidak cocok dengan spasi; itu adalah pernyataan yang cocok di antara karakter (atau di awal atau akhir baris, dalam banyak kasus).
strager
1
@strager: Ya, Anda benar - penjelasan saya agak tidak tepat. Saya akan mengedit.
Michael Madsen
117

Hanya saja, jangan jangkar pola Anda:

/Test/

Regex di atas akan memeriksa string literal "Test" yang ditemukan di suatu tempat di dalamnya.

Platinum Azure
sumber
2
Terima kasih, saya tidak tahu itu sesederhana itu! Saya pasti tidak melihat ini di Googling saya. Apa yang Anda maksud dengan jangan jangkar pola saya?
GurdeepS
7
Anda dapat mengaitkan pola agar cocok dengan awal atau akhir string, misalnya / ^ Test / atau / Test $ / masing-masing atau bahkan / ^ Test $ / agar sama persis. Contoh ini konyol karena tidak memberikan manfaat dibandingkan membandingkan persamaan tetapi misalnya saat melakukan validasi bidang formulir, regex seperti / ^ \ d + $ / hanya akan cocok jika bidang berisi setidaknya satu digit dan tidak ada apa pun selain digit numerik.
David Clarke
-13

Saya terlambat beberapa tahun, tetapi mengapa tidak ini?

[Tt][Ee][Ss][Tt]
pengguna2747691
sumber
4
Jawaban ini muncul dalam antrean ulasan berkualitas rendah, mungkin karena Anda tidak menjelaskan kodenya. Jika Anda benar-benar menjelaskannya (dalam jawaban Anda), kemungkinan besar Anda akan mendapatkan lebih banyak suara positif — dan penanya benar-benar mempelajari sesuatu!
Pria
6
Ini tidak terlalu bisa digeneralisasikan - bayangkan jika kata yang harus Anda cari berasal dari pengguna. Anda harus menghasilkan [Aa]pola untuk setiap huruf dan itu akan menjadi sangat jelek dengan cepat.
Platinum Azure