*, ?, +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, catau 0:[^a-c0]
Yang terakhir: cocokkan string tiga huruf apa pun kecuali foodan 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, catau 0, sementara [^a-c0]+akan mencocokkan satu atau lebih dari apa pun yang tidak a, b, catau 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.