Saya menemukan hal-hal ini di tubuh regex saya tetapi saya tidak tahu apa yang bisa saya gunakan untuk itu. Apakah ada yang punya contoh sehingga saya bisa mencoba memahami cara kerjanya?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind
(?>) - atomic group
regex
lookaround
Spidfire
sumber
sumber
Jawaban:
Contohnya
Diberikan string
foobarbarfoo
:Anda juga dapat menggabungkannya:
Definisi
Lihat ke depan positif
(?=)
Temukan ekspresi A di mana ekspresi B berikut:
Lihat negatif di depan
(?!)
Temukan ekspresi A di mana ekspresi B tidak mengikuti:
Lihat di belakang positif
(?<=)
Temukan ekspresi A di mana ekspresi B mendahului:
Lihat di belakang negatif
(?<!)
Temukan ekspresi A di mana ekspresi B tidak mendahului:
Kelompok atom
(?>)
Grup atom keluar dari grup dan membuang pola-pola alternatif setelah pola pertama yang cocok di dalam grup (pengulangan mundur dinonaktifkan).
(?>foo|foot)s
diterapkan untukfoots
akan cocok dengan alternatif pertamafoo
, lalu gagal karenas
tidak segera mengikuti, dan berhenti karena pengulangan mundur dinonaktifkanGrup non-atomik akan memungkinkan mundurnya; jika pencocokan berikutnya gagal, maka akan mundur dan menggunakan pola alternatif sampai kecocokan untuk seluruh ekspresi ditemukan atau semua kemungkinan habis.
(foo|foot)s
diterapkan untukfoots
akan:foo
, lalu gagal karenas
tidak segera mengikutifoots
, dan mundur ke alternatif kedua;foot
, lalu berhasil dengans
segera mengikutifoots
, dan berhenti.Beberapa sumber daya
Penguji online
sumber
Penelusuran adalah pernyataan lebar nol. Mereka memeriksa regex (ke kanan atau kiri dari posisi saat ini - berdasarkan depan atau belakang), berhasil atau gagal ketika kecocokan ditemukan (berdasarkan apakah itu positif atau negatif) dan membuang bagian yang cocok. Mereka tidak mengkonsumsi karakter apa pun - pencocokan untuk regex yang mengikuti mereka (jika ada), akan mulai pada posisi kursor yang sama.
Baca regular-expression.info untuk lebih jelasnya.
Sintaksis:
Cocokkan hanya jika REGEX_1 cocok; setelah mencocokkan REGEX_1, kecocokan dibuang dan mencari REGEX_2 dimulai pada posisi yang sama.
contoh:
REGEX_1 adalah
[a-z0-9]{4}$
yang cocok dengan empat karakter alfanumerik yang diikuti dengan akhir baris.REGEX_2
[a-z]{1,2}[0-9]{2,3}
cocok dengan satu atau dua huruf diikuti oleh dua atau tiga digit.REGEX_1 memastikan bahwa panjang string memang 4, tetapi tidak mengkonsumsi karakter apa pun sehingga pencarian REGEX_2 dimulai di lokasi yang sama. Sekarang REGEX_2 memastikan bahwa string tersebut cocok dengan beberapa aturan lain. Tanpa melihat ke depan itu akan cocok dengan string dengan panjang tiga atau lima.
Sintaksis:
Cocokkan hanya jika REGEX_1 tidak cocok; setelah memeriksa REGEX_1, pencarian untuk REGEX_2 dimulai pada posisi yang sama.
contoh:
Bagian lihat-depan memeriksa
FWORD
dalam string dan gagal jika menemukannya. Jika tidak menemukanFWORD
, lihat-depan berhasil dan bagian berikut memverifikasi bahwa panjang string adalah antara 10 dan 30 dan itu hanya berisi karakter kataa-zA-Z0-9_
Lihat-belakang mirip dengan melihat-depan: itu hanya melihat di belakang posisi kursor saat ini. Beberapa rasa regex seperti javascript tidak mendukung pernyataan di belakang. Dan sebagian besar rasa yang mendukungnya (PHP, Python, dll) mengharuskan bagian yang terlihat di belakang itu memiliki panjang yang tetap.
sumber
(?=REGEX_1)REGEX_2
hanya akan cocok jikaREGEX_2
datang setelahREGEX_1
?Mencari-cari dengan cepat.
Bagaimana membedakan lookahead dan lookbehind? Ikuti tur 2 menit dengan saya:
Seharusnya
Sekarang, kami bertanya B, Di mana Anda?
B memiliki dua solusi untuk menyatakan lokasi itu:
Satu, B memiliki A di depan dan memiliki C bebind
Dua, B di depan (lookahead) dari C dan di belakang (lookhehind) A.
Seperti yang bisa kita lihat, bagian belakang dan depan berlawanan dalam dua solusi.
Regex adalah solusi Dua.
sumber