*, ?, +
karakter semua berarti cocok dengan karakter ini. Karakter mana yang berarti 'jangan' cocok dengan ini? Contoh akan membantu.
Jawaban:
Anda dapat menggunakan kelas karakter yang dinegasikan untuk mengecualikan karakter tertentu: misalnya [^abcde]
akan cocok dengan apa pun kecuali karakter a, b, c, d, e.
Alih-alih menentukan semua karakter secara harfiah, Anda dapat menggunakan singkatan di dalam kelas karakter: [\w]
(huruf kecil) akan cocok dengan "karakter kata" (huruf, angka dan garis bawah), [\W]
(huruf besar) akan cocok dengan apa pun kecuali karakter kata; demikian pula, [\d]
akan cocok dengan angka 0-9 sementara [\D]
cocok dengan apapun kecuali angka 0-9, dan seterusnya.
Jika Anda menggunakan PHP, Anda dapat melihat dokumentasi kelas karakter regex .
Ada dua cara untuk mengatakan "jangan cocok": rentang karakter, dan lookahead / lookbehind negatif lebar-nol.
Mantan: tidak cocok a
, b
, c
atau 0
:[^a-c0]
Yang terakhir: cocokkan string tiga huruf apa pun kecuali foo
dan bar
:
(?!foo|bar).{3}
atau
.{3}(?<!foo|bar)
Juga, koreksi untuk Anda: *
, ?
dan +
tidak benar-benar cocok apa-apa. Mereka adalah operator pengulangan, dan selalu mengikuti operator yang cocok. Dengan demikian, a+
berarti mencocokkan satu atau lebih dari a
, [a-c0]+
berarti mencocokkan satu atau lebih dari a
, b
, c
atau 0
, sementara [^a-c0]+
akan mencocokkan satu atau lebih dari apa pun yang tidak a
, b
, c
atau 0
.
^((?!foo).)+$
Cocokkan baris mana pun yang tidak mengandung foo regex101.com/r/z6a65l/4
^
digunakan di awal rentang karakter, atau pernyataan lookahead / lookbehind negatif.
>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>
?!
dalam 2 contoh terakhir atau dapatkah Anda menggunakannya !
sendiri? Apa yang ?
dilakukan disana?
?
untuk memberi tahu bahwa itu adalah ekstensi. Mesin regex lain mungkin memiliki aturannya sendiri.