Di Perl \S
cocok dengan karakter non-spasi.
Bagaimana cara mencocokkan karakter non spasi kecuali garis miring terbalik \
?
Anda dapat menggunakan kelas karakter :
/[^\s\\]/
cocok dengan apa pun yang bukan karakter spasi atau \
. Berikut contoh lainnya:
[abc]
berarti "cocok a
, b
atau c
"; [^abc]
berarti "mencocokkan karakter apa pun kecuali a
, b
atau c
".
^
diartikan sebagai negasi dan kapan sebagai baris awal? Dalam hal ini, mengapa ini tidak cocok dengan garis yang dimulai dengan jumlah spasi$0~/\s*^\s/
$0~/\s*^\s/
diikuti oleh karakter yang bukan spasi putih/^\s+/
- awal baris, diikuti oleh satu atau lebih karakter spasi.g
pengubah./[^\s\\]/g
Anda bisa menggunakan lookahead:
sumber
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. Berikut ini bekerja dengan baik untuk saya(?=\S)[^"]*
.Ini bekerja untuk saya menggunakan sed [ Sunting: komentar di bawah menunjukkan sed tidak mendukung \ s]
sementara
tidak
sumber
\s
cocok lebih dari sekedar karakter spasi. Ini termasuk TAB, linefeed carriage return, dan lainnya (berapa banyak lainnya bergantung pada rasa regex). Ini adalah penemuan Perl, awalnya singkatan dari kelas karakter POSIX[:space:]
, dan tidak didukung dised
. Regex pertama Anda di atas seharusnyas/[^[:space:]g]//g
.echo "ghai ghai" | sed "s/[^[:space:]g]//g"
Hasil:g g
Di sistem saya: CentOS 5
Saya dapat menggunakan di
\s
luar koleksi tetapi harus menggunakan[:space:]
di dalam koleksi. Sebenarnya saya[:space:]
hanya bisa menggunakan koleksi di dalam. Jadi untuk mencocokkan satu spasi menggunakan ini saya harus menggunakan[[:space:]]
Yang benar-benar aneh.\s
[[:space:]]
[^[:space:]]
Keduanya tidak akan berhasil:
sumber
([^[:space:]])
bukan([^\s])
. Saya menggunakan openSUSE Tumbleweed 2018 04 03.