Saya perlu mencocokkan karakter spasi dalam ekspresi reguler PHP. Ada yang punya ide?
Maksud saya seperti "gavin schulz", ruang di antara dua kata. Saya menggunakan ekspresi reguler untuk memastikan bahwa saya hanya mengizinkan huruf, angka, dan spasi. Tapi saya tidak yakin bagaimana menemukan ruang. Inilah yang saya miliki sekarang:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
Jawaban:
Jika Anda mencari ruang, itu akan menjadi
" "
(satu ruang).Jika Anda mencari satu atau lebih, itu
" *"
(itu dua spasi dan tanda bintang) atau" +"
(satu spasi dan plus).Jika Anda sedang mencari jarak umum, penggunaan
"[ X]"
atau"[ X][ X]*"
atau"[ X]+"
di manaX
adalah karakter tab fisik (dan masing-masing didahului oleh satu ruang di semua contoh tersebut).Ini akan bekerja di setiap mesin * regex yang pernah saya lihat (beberapa di antaranya bahkan tidak memiliki karakter satu atau lebih
"+"
, ugh).Jika Anda tahu Anda akan menggunakan salah satu mesin regex yang lebih modern,
"\s"
dan variasinya adalah cara untuk melakukannya. Selain itu, saya percaya batas kata cocok dengan awal dan akhir baris juga, penting ketika Anda mencari kata-kata yang mungkin muncul tanpa sebelumnya atau mengikuti spasi.Khusus untuk PHP, halaman ini dapat membantu.
Dari hasil edit Anda, tampaknya Anda ingin menghapus semua karakter yang tidak valid. Awal dari ini adalah (perhatikan ruang di dalam regex):
Jika Anda juga ingin tipuan untuk memastikan hanya ada satu ruang antara setiap kata dan tidak ada pada awal atau akhir, itu sedikit lebih rumit (dan mungkin pertanyaan lain) tetapi ide dasarnya adalah:
sumber
A-Za-z...
. Tanda sisipan di dalam kurung kotak menentukan itu. Memindahkan tanda sisipan di luar tanda kurung kotak mengubah artinya menjadi karakter yang cocok dalam set di awal string.\040
cocok persis dengan karakter spasi.Referensi PHP Regexp
Urutan Escape Tautan Baru
untuk Regex PHP
sumber
Berikut ini semua yang perlu Anda ketahui tentang spasi putih dalam ekspresi reguler:
[[:blank:]]
Hanya spasi atau tab[[:space:]]
Ruang putih\s
Setiap karakter spasi putih\v
Ruang kosong vertikal\h
Ruang putih horisontalx
Abaikan spasi putihsumber
Sepertinya saya suka menggunakan REGEX dalam hal ini hanya akan berlebihan. Mengapa tidak hanya hanya strpos untuk menemukan karakter spasi. Juga, tidak ada yang istimewa tentang karakter spasi dalam ekspresi reguler, Anda harus dapat mencarinya sama seperti Anda mencari karakter lain. Yaitu, kecuali Anda menonaktifkan spasi putih pola, yang tidak akan diperlukan dalam kasus ini.
sumber
Di Perl switch adalah
\s
(spasi).sumber
Maka sesederhana menambahkan ruang ke apa yang sudah Anda miliki:
(catatan, saya menghapus
s|
yang tampaknya tidak disengaja? Tentu sajas
itu berlebihan; Anda dapat mengembalikannya|
jika Anda membutuhkannya)Jika Anda secara spesifik menginginkan * a * space, karena hanya dalam satu spasi, Anda akan memerlukan ekspresi yang lebih kompleks dari ini, dan mungkin ingin mempertimbangkan potongan logika non-regex yang terpisah.
sumber
Anda juga dapat menggunakan \ b untuk batas kata. Untuk nama saya akan menggunakan sesuatu seperti ini:
EDIT Memodifikasi ini menjadi regex dalam contoh Perl
EDIT LAGI Berdasarkan apa yang Anda inginkan:
sumber
Saya mencoba [[: space:]] dalam contoh di mana kelihatannya blogger di WordPress menggunakan karakter spasi non-standar. Sepertinya itu akan berhasil.
sumber
Gunakan seperti ini untuk memungkinkan ruang tunggal.
sumber