Rumah > pembangunan bahagian belakang > Golang > Ungkapan biasa kepada Glob dan sebaliknya penukaran

Ungkapan biasa kepada Glob dan sebaliknya penukaran

PHPz
Lepaskan: 2024-02-06 11:03:15
ke hadapan
840 orang telah melayarinya

正则表达式到 Glob 以及反之亦然的转换

Kandungan soalan

Kami mempunyai keperluan untuk menukar ungkapan biasa kepada Globs yang disokong oleh bahagian hadapan awan dan sebaliknya. Sebarang cadangan bagaimana kita boleh mencapai ini dan adakah ia boleh dilakukan pada mulanya? Khususnya dari Regex ke Glob, kerana saya faham regex ialah superset jadi mungkin tidak mungkin untuk menukar semua Regex kepada Glob yang sepadan?


Jawapan betul


Untuk menukar daripada glob anda perlu menulis penghurai yang membahagikan corak kepada pokok sintaks abstrak. Contohnya, glob *-{[0-9],draft}.docx 可能会解析为 [anything(), "-", oneof([range("0", "9"), "draft"] ), ".docx"].

Anda kemudiannya akan mengulang ast dan mengeluarkan ungkapan biasa yang setara untuk setiap nod. Sebagai contoh, peraturan yang mungkin anda gunakan untuk ini mungkin:

anything()  -> .*
range(x, y) -> [x-y]
oneof(x, y) -> (x|y)
Salin selepas log masuk

Jana ungkapan biasa .*-([0-9]|draft).docx.

Ini tidak sempurna, kerana anda juga perlu ingat untuk melarikan diri daripada mana-mana watak istimewa . 是正则表达式中的特殊字符,因此您应该对其进行转义,最终生成 .*-([0-9]|draft).docx ialah watak istimewa dalam regex, jadi anda harus melarikan diri, menghasilkan

.

Tegasnya, ungkapan biasa tidak semua boleh ditukar kepada corak glob. Operasi kleene stara* (即任意数量的 a tidak wujud dalam globbing; ungkapan biasa mudah

aksara) tidak boleh ditukar kepada corak glob.

Saya tidak pasti jenis glob cloudfront yang menyokong (dokumentasi tidak mengembalikan padanan untuk istilah "glob"), tetapi berikut adalah beberapa dokumentasi tentang kad liar corak glob shell yang biasa disokong

.

Berikut ialah ringkasan beberapa jujukan yang setara:
Glob WildcardEkspresi BiasaMaksudnyaMana-mana watak tunggalSifar atau lebih aksaraMana-mana watak daripada julatWatak bukan dalam julatSalah satu watak yang diberikanSalah satu pilihan yang diberikanSalah satu pilihan yang diberikan, mempertimbangkan kad bebas bersarang
? .
* .*
[a-z] [a-z]
[!a-m] [^a-m]
[a,b,c] [abc]
{cat,dog,bat} (cat|dog|bat)
{*.tar,*.gz} (.*.tar|.*.gz)
🎜

Atas ialah kandungan terperinci Ungkapan biasa kepada Glob dan sebaliknya penukaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan