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.
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)
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
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*
(即任意数量的 a
Ich 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 ist eine Zusammenfassung einiger äquivalenter Sequenzen:
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!