Postingan lainnya
Agar dash/hyphen tidak ikut terambil saat angka tidak ditemukan di preg_match
Saya sedang mencoba mengambil angka dari sebuah string menggunakan regex preg_match, tapi ada masalah ketika angka kedua setelah dash tidak ada, maka dash tersebut ikut terambil apabila ada spasi atau huruf setelahnya.
$gabung = '';
if (preg_match('/(?<=buku)[\s\d]+-?[\s\d]+/i', $dicari, $matches)) {
if (stripos($matches[0], ' ') && strpos($matches[0], '-')) {
$hapus_spasi = str_replace(' ', '', $matches[0]);
$gabung.= 'b' . $hapus_spasi;
}
else {
$hapus_spasi = str_replace(' ', '', $matches[0]);
$gabung.= 'b' . $hapus_spasi;
}
echo $gabung;
}
yang diharapkan: 1. "buku 1 - " = "buku 1" 2. "buku 1 - abcd" = "buku 1" 3. "buku 1 - 3" = "buku 1-3"
yang terjadi: 1. buku 1- ("-" Dash ikut terambil) 2. buku 1- ("-" Dash ikut terambil) 3. buku 1-3 (Berhasil)
Saya tidak terbiasa dengan regex, jadi mohon untuk bantuannya jika bisa dijelaskan kesalahan saya diatas juga.
Tanggapan
isinya $dicari dan $matches seperti apa gan?
isi $dicari dan $matches bisa dilihat di bagian "yang diharapkan" seperti "buku 1 - abc (ada di variable $dicari) = buku 1 ($matches)"
1 Jawaban:
Hi bro @Yuuzan,
Mungkin regex simple ini dapat membantu: <pre> preg_match('/buku.+(?=\d).(?!\w))/', $string, $matches); </pre> penjelasan:
- buku: match kata buku
- .+: match character sampai delimiter
- (?=\d): Positive Lookahead, artinya match character sampai ketemu delimiter \d (character angka)
- .(?!\w): sambung lagi sama Negative Lookahead, sampai ketemu delimiter \w (character huruf)
Regards_