정규 표현식을 클라우드 프런트엔드에서 지원하는 Globs로 변환하거나 그 반대로 변환해야 한다는 요구 사항이 있습니다. 이를 달성할 수 있는 방법에 대한 제안이 있습니까? 애초에 이것이 가능합니까? 특히 Regex에서 Glob로, 정규 표현식은 상위 집합이므로 모든 Regex를 해당 Glob로 변환하는 것이 불가능할 수도 있다는 것을 알고 있습니까?
glob에서 변환하려면 패턴을 추상 구문 트리로 분할하는 파서를 작성해야 합니다. 예를 들어, 글로브 *-{[0-9],draft}.docx
可能会解析为 [anything(), "-", oneof([range("0", "9"), "draft"] ), ".docx"]
.
그런 다음 ast를 반복하고 각 노드에 대해 동등한 정규식을 출력합니다. 예를 들어 이를 위해 사용할 수 있는 규칙은 다음과 같습니다.
으아아아정규 표현식 생성 .*-([0-9]|draft).docx
.
특수 문자를 이스케이프 처리해야 하므로 완벽하지는 않습니다. .
是正则表达式中的特殊字符,因此您应该对其进行转义,最终生成 .*-([0-9]|draft).docx
는 정규 표현식의 특수 문자이므로 이스케이프해야
엄밀히 말하면 정규식을 모두 glob 패턴으로 변환할 수는 없습니다. kleene stara*
(即任意数量的 a
작업은 globbing에 존재하지 않습니다. 간단한 정규 표현식
Cloudfront가 어떤 유형의 glob을 지원하는지 잘 모르겠지만(문서에서는 "glob"이라는 용어와 일치하는 항목을 반환하지 않음) 여기에 일반적으로 지원되는 쉘 glob 패턴 와일드카드에 대한 일부 문서가 있습니다
.다음은 일부 동등한 시퀀스의 요약입니다.
Glob 와일드카드 | 정규 표현식 | 의미 |
---|---|---|
?
|
.
|
모든 단일 문자 |
*
|
.*
|
0개 이상의 문자 |
[a-z]
|
[a-z]
|
해당 범위의 모든 캐릭터 |
[!a-m]
|
[^a-m]
|
범위에 없는 문자 |
[a,b,c]
|
[abc]
|
주어진 캐릭터 중 하나 |
{cat,dog,bat}
|
(cat|dog|bat)
|
주어진 옵션 중 하나 |
{*.tar,*.gz}
|
(.*.tar|.*.gz)
|
중첩된 와일드카드를 고려한 주어진 옵션 중 하나 |
위 내용은 정규식을 Glob으로 또는 그 반대로 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!