Anda perlu menggunakan lookahead seperti yang dikatakan beberapa responden lain, tetapi lookahead harus memperhitungkan karakter lain antara kata target dan posisi pertandingan saat ini. Sebagai contoh:
(?=.*word1)(?=.*word2)(?=.*word3)
The .*
di lookahead pertama memungkinkannya cocok dengan banyak karakter yang diperlukan sebelum sampai ke "word1". Kemudian posisi pertandingan diatur ulang dan lookahead kedua mencari "word2". Atur ulang lagi, dan bagian terakhir cocok dengan "word3"; karena ini adalah kata terakhir yang Anda periksa, tidak perlu dilihat, tetapi tidak sakit.
Untuk mencocokkan seluruh paragraf, Anda harus melabuhkan regex di kedua ujungnya dan menambahkan final .*
untuk menggunakan karakter yang tersisa. Menggunakan notasi gaya Perl, itu akan menjadi:
/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m
Pengubah 'm' adalah untuk mode multline; itu memungkinkan ^
dan $
cocok di batas paragraf ("batas garis" di regex-spoke). Sangat penting dalam hal ini bahwa Anda tidak menggunakan pengubah 's', yang memungkinkan metacharacter titik mencocokkan baris baru serta semua karakter lainnya.
Terakhir, Anda ingin memastikan Anda mencocokkan seluruh kata dan bukan hanya fragmen kata yang lebih panjang, jadi Anda perlu menambahkan batas kata:
/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m