정규 표현식의 정의는 무엇입니까? 정규식이라고 주장했습니다. `[Rr]eading[Tt]est[Dd]ata` Ghoti는 그 대신

나는 최근 질문에 대한 나의 대답에 대한 의견에서 정규 표현을 구성하는 것에 대해 Ghoti 와 우호적 인 논쟁에 들어갔다 . 다음은 정규식이라고 주장했습니다.

`[Rr]eading[Tt]est[Dd]ata`

Ghoti는 그 대신 파일 glob라고 주장하면서 동의하지 않았습니다. Wikipedia 의 glob 페이지는 다음과 같이 주장합니다.

글롭은 클레인 스타에 대한 구문을 포함하지 않으므로 표현식의 앞 부분을 여러 번 반복 할 수 있습니다. 따라서 정규 표현식으로 간주되지 않으므로 주어진 유한 알파벳보다 더 큰 정규 언어 세트를 설명 할 수 있습니다.

그러나이 주장에 대한 인용은 없으며, 이는 특정 위키 백과 편집자의 의견 일뿐임을 나타냅니다.

The Single UNIX® Specification, Version 2 는 BRE (Basic Regular Expression)가 단일 문자 일 수도 있다고 말합니다.

일반 문자는 BRE 특수 문자에 나열된 BRE 특수 문자를 제외한 지원되는 문자 세트의 모든 문자와 일치하는 BRE입니다.

그렇다면 * nix 세계에서 정규 표현식의 정의는 무엇이며 해당 정의는 파일 globs를 제외합니까?



답변

lk- 말했듯이, 의 옵션은 글로브 아닌 정규 표현식으로 인수를 처리합니다.-namefind

문자열이 glob 또는 정규식으로 해석되는지 또는 일반 문자열로 해석되는지는 해석을 수행하는 데 사용되는 내용에 따라 다릅니다. 상황의 문제입니다. 당신의 예에서 문자열은 [Rr]eading[Tt]est[Dd]ata다양한 방법으로 평가,하지만 그것을 할 수 있습니다 것은 당신이 그것을 사용하는 방법에 따라 달라집니다. 그것을 glob로 사용하십시오. glob입니다. 정규식으로 사용하십시오. 정규식입니다. 이 문제가 발생한 질문 의 경우 OP는 문자열을 정규식으로 설명했습니다. 따라서 우리는 그가 정규식으로 해석하려고한다고 가정 할 수 있습니다.

단일 문자는 절대적으로 정규 표현식이 될 수 있습니다. 또한 문자열이 될 수도 있고 글로브 일 수도 있습니다. 원한다면 바이트 또는 tinyint로 해석 될 수 있습니다. 그것은 모두 상황에 달려 있습니다.

다양한 형태의 정규 표현식에 대한 많은 사양이 있습니다. BRE와 ERE는 잘 문서화되어 있습니다. PCRE는 다양한 기능을 추가합니다. 많은 정규 표현식 통역사는 예를 들어 “모든 ERE 및 일부 PCRE”를 구현합니다. 또는 ERE에서 일부 기능을 뺀 것입니다. 공식적인 사양으로 가면 많은 도구가 정규식 지원을 주장하여 부정확하거나 불완전한 것으로 판명됩니다. 세부 사항을 알면 정규식을 평가하는 도구 내에서 사용 가능한 기능 모음에 솔루션을 적용 할 수 있습니다.

따라서 … 글로브를 “제외”하는 정의를 찾고 있다면 잘못된 관점에서 이것을보고있는 것입니다. 무엇인가하는 것은 의해 결정됩니다 당신이 그것을 사용하는 방법 .


답변

[Rr]eading[Tt]est[Dd]ata글로브 (glob)와 정규 표현식 모두에 유효한 것으로 보이며, 나는 두 해석에서 동일한 “의미”를 가지고 있다고 생각합니다. 그러나 -name옵션은 find인수를 정규식이 아닌 glob로 취급합니다.

이 차이는 foo*유효한 glob 및 유효한 정규 표현식이지만과 같이 해석에 따라 다른 의미를 갖는 인수를 제공하는 경우 중요합니다 .

글로브 패턴으로 해석하면,이 일치합니다 foo, foobar, foo123, 등

정규 표현식으로 해석하면,이 일치합니다 fo, foo, foooooo, 등