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?
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)
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
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 Wildcard | Ekspresi Biasa | Maksudnya |
---|---|---|
?
|
.
|
Mana-mana watak tunggal |
*
|
.*
|
Sifar atau lebih aksara |
[a-z]
|
[a-z]
|
Mana-mana watak daripada julat |
[!a-m]
|
[^a-m]
|
Watak bukan dalam julat |
[a,b,c]
|
[abc]
|
Salah satu watak yang diberikan |
{cat,dog,bat}
|
(cat|dog|bat)
|
Salah satu pilihan yang diberikan |
{*.tar,*.gz}
|
(.*.tar|.*.gz)
|
Salah satu pilihan yang diberikan, mempertimbangkan kad bebas bersarang |
Atas ialah kandungan terperinci Ungkapan biasa kepada Glob dan sebaliknya penukaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!