Heim > Backend-Entwicklung > Golang > Regulärer Ausdruck in Glob und umgekehrt

Regulärer Ausdruck in Glob und umgekehrt

PHPz
Freigeben: 2024-02-06 11:03:15
nach vorne
926 Leute haben es durchsucht

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

Frageninhalt

Wir müssen reguläre Ausdrücke in Globs konvertieren, die vom Cloud-Frontend unterstützt werden, und umgekehrt. Irgendwelche Vorschläge, wie wir das erreichen können und ist es überhaupt möglich? Insbesondere von Regex zu Glob. Soweit ich weiß, ist Regex eine Obermenge, sodass es möglicherweise nicht möglich ist, alle Regex in den entsprechenden Glob umzuwandeln.


Richtige Antwort


Um von einem Glob zu konvertieren, müssen Sie einen Parser schreiben, der das Muster in abstrakte Syntaxbäume aufteilt. Zum Beispiel glob *-{[0-9],draft}.docx 可能会解析为 [anything(), "-", oneof([range("0", "9"), "draft"] ), ".docx"].

Sie werden dann über ast iterieren und den entsprechenden regulären Ausdruck für jeden Knoten ausgeben. Eine Regel, die Sie hierfür verwenden könnten, könnte beispielsweise lauten:

anything()  -> .*
range(x, y) -> [x-y]
oneof(x, y) -> (x|y)
Nach dem Login kopieren

Generieren Sie reguläre Ausdrücke .*-([0-9]|draft).docx.

Das ist nicht perfekt, da Sie auch daran denken müssen, alle Sonderzeichen zu maskieren. . 是正则表达式中的特殊字符,因此您应该对其进行转义,最终生成 .*-([0-9]|draft).docx ist ein Sonderzeichen in einer Regex, also sollten Sie es maskieren, was zu

führt.

Streng genommen können nicht alle regulären Ausdrücke in Glob-Muster konvertiert werden. Die Operation „kleene star“ gibt es beim Globbing nicht; einfache reguläre Ausdrücke (Zeichen) können nicht in Glob-Muster konvertiert werden. a* (即任意数量的 aIch bin mir nicht sicher, welche Arten von Globs Cloudfront unterstützt (die Dokumentation gibt keine Übereinstimmungen für den Begriff „Glob“ zurück), aber

Hier finden Sie eine Dokumentation zu häufig unterstützten Shell-Glob-Muster-Platzhaltern

. Hier ist eine Zusammenfassung einiger äquivalenter Sequenzen:

Glob Wildcard
Regulärer Ausdruck Bedeutung
? .Jedes einzelne Zeichen
* .*Null oder mehr Zeichen
[a-z] [a-z]Jeder Charakter aus dem Sortiment
[!a-m] [^a-m]Ein Zeichen, das nicht im Bereich liegt
[a,b,c] [abc]Einer der angegebenen Charaktere
{cat,dog,bat} (cat|dog|bat)Eine der angegebenen Optionen
{*.tar,*.gz} (.*.tar|.*.gz)Eine der gegebenen Optionen unter Berücksichtigung verschachtelter Platzhalter

Das obige ist der detaillierte Inhalt vonRegulärer Ausdruck in Glob und umgekehrt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage