Tanda Hubung dalam Set di Regular Expression PHP
Tanda hubung - juga merupakan karakter khusus di dalam []
(tetapi di luar - bukan). Jika Anda membutuhkan tanda hubung itu sendiri sebagai simbol - letakkan di posisi
di mana dia tidak akan dianggap sebagai pemisah
kelompok.
Mengapa ini penting: Anda dapat membuat grup
karakter, tanpa menyadarinya. Misalnya,
seperti ini - [:-@] - Anda pikir Anda
memilih titik dua, tanda hubung, dan tanda @, padahal
sebenarnya yang terbentuk adalah grup karakter antara
: dan @. Grup ini mencakup
karakter-karakter berikut: :, ;, ?,
<, =, >.
Dari mana asalnya? Dari tabel ASCII - titik dua memiliki nomor yang lebih kecil daripada tanda @ - sehingga terbentuklah grup. Artinya semua grup terbentuk berdasarkan tabel ASCII (jika diinginkan, ini bisa dimanfaatkan).
Bagaimana mengatasinya: letakkan karakter tanda hubung
di posisi yang pasti tidak akan dianggap sebagai
karakter grup, misalnya, di awal atau di akhir
(yaitu setelah [ atau sebelum ]).
Anda juga bisa meng-escape tanda hubung - maka
ia akan mewakili dirinya sendiri terlepas dari
posisinya. Misalnya, alih-alih [:-@], tulis
[:\-@] - dan grup tidak akan terbentuk lagi,
yang ada adalah tiga simbol - titik dua, tanda hubung, dan tanda @.
Contoh
Dalam contoh berikut, pola pencariannya adalah:
angka 1, kemudian huruf dari 'a'
sampai 'z', kemudian angka 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Hasilnya, yang akan tersimpan dalam variabel adalah:
'! 1-2 ! !'
Contoh
Sekarang mari kita escape tanda hubung. Hasilnya
pola pencariannya adalah: angka 1, kemudian
huruf 'a', atau tanda hubung, atau huruf 'z',
kemudian angka 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Hasilnya, yang akan tersimpan dalam variabel adalah:
'! ! 1c2 !'
Contoh
Anda bisa cukup memindahkan tanda hubung, tanpa meng-escape-nya:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Hasilnya, yang akan tersimpan dalam variabel adalah:
'! ! 1c2 !'
Contoh
Dalam contoh berikut, pola pencariannya adalah:
karakter pertama - adalah huruf kecil atau
tanda hubung '-', lalu dua huruf 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Hasilnya, yang akan tersimpan dalam variabel adalah:
'! Axx ! @xx'
Contoh
Dalam contoh berikut, pola pencariannya adalah:
karakter pertama - adalah huruf kecil, huruf besar
atau tanda hubung '-', lalu dua huruf
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Hasilnya, yang akan tersimpan dalam variabel adalah:
'! ! ! @xx'
Contoh
Anda bisa meletakkan tanda hubung di antara dua grup - di sana dia pasti tidak akan membuat grup lain:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Hasilnya, yang akan tersimpan dalam variabel adalah:
'! ! ! @xx'
Tugas Praktis
Diberikan string:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Temukan semua string sesuai pola berikut:
huruf 'x', huruf besar atau huruf kecil
atau tanda hubung, huruf 'z'.
Diberikan string:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Temukan semua string sesuai pola berikut:
huruf 'x', kemudian tanda dolar, atau
tanda hubung atau tanda plus, lalu huruf 'z'.