정규식의 정의는 무엇입니까?

정규식의 정의는 무엇입니까?

나는 최근에 교류했습니다.고티내 대답이 무엇인지에 대한 댓글의 정규 표현식이것질문. 나는 다음이 정규 표현식이라고 주장합니다.

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

Ghoti는 이것이 파일 덩어리라고 주장하며 이에 동의하지 않습니다. 이것전반적인 상황Wikipedia 페이지에서는 다음과 같이 주장합니다(강조):

Glob에는 표현식의 이전 부분을 여러 번 반복할 수 있는 Kleene 별표 구문이 포함되어 있지 않습니다.따라서 이는 주어진 제한된 알파벳으로 훨씬 더 많은 정규 언어 세트를 설명할 수 있는 정규식으로 간주되지 않습니다.

그러나 이 진술은 인용되지 않았으며 이는 특정 위키피디아 편집자의 의견일 뿐임을 시사합니다.

이것단일 UNIX ® 사양, 버전 2, 기본 정규식(BRE)이 단일 문자일 수도 있음을 지적합니다.

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

그렇다면 *nix 세계에서 정규 표현식의 정의는 무엇입니까? 이 정의는 파일 글로브를 제외합니까?

답변1

lk-가 말했듯이,옵션은 인수를 정규식이 아닌 전역 변수로 -name처리합니다 .find

문자열이 glob, 정규 표현식 또는 일반 문자열로 해석되는지 여부는 해석에 사용되는 항목에 따라 다릅니다. 이것은 상황의 문제입니다. 예제의 문자열은 [Rr]eading[Tt]est[Dd]ata다양한 방법으로 평가할 수 있지만 그게 무엇입니까?어떻게 사용하느냐에 따라 다릅니다. 그것을 글로브로 사용하면 글로브입니다. 정규식으로 사용하세요. 정규식입니다. 이 경우문제는 어디에서 발생합니까?, OP는 문자열을 정규식으로 설명했습니다. 그래서 우리는 그가 그것을 정규식으로 해석할 계획이라고 추측할 수 있습니다.

단일 문자 절대값은 정규식일 수도 있습니다. 문자열이나 글로브일 수도 있습니다. 원하는 경우 바이트 또는 Tinyint로 해석될 수 있습니다. 그것은 모두 상황에 따라 다릅니다.

정규식은 다양한 형태의 사양으로 제공됩니다. BRE와 ERE는 잘 문서화되어 있습니다. PCRE는 많은 기능을 추가합니다. 예를 들어, 많은 정규식 해석기는 "모든 ERE 및 일부 PCRE"를 구현합니다. 아니면 일부 기능을 뺀 ERE를 수행할 수도 있습니다. 공식 사양을 따르면 많은 도구에서 정규식을 지원한다고 주장하지만 이는 부정확하거나 불완전한 것으로 판명됩니다. 세부 사항을 알면 정규식을 평가하는 모든 도구에서 사용할 수 있는 기능 집합에 솔루션을 적용할 수 있습니다.

따라서...전역을 "제외"하는 정의를 찾고 있다면 잘못된 관점에서 문제를 보고 있는 것입니다. 이게 뭐야?에 따라어떻게 사용하세요?.

답변2

[Rr]eading[Tt]est[Dd]ataglob과 정규식 모두로 작동하는 것 같고 두 해석 모두에서 동일한 "의미"가 있다고 생각합니다. 그러나 -name이 옵션은 find매개변수를 정규식이 아닌 전역 변수로 처리합니다.

foo*유효한 glob이자 유효한 정규식이지만 해석에 따라 의미가 다른 인수를 제공하는 경우 이러한 구별이 중요합니다 .

glob 패턴으로 해석되면 , foo등과 foobar일치 합니다 foo123.

정규식으로 해석하면 , 등이 일치 합니다 fo.foofoooooo

관련 정보