2010-05-10 2 views
31

필자의 정규식은 사소한 사실상 표준의 일종이지만, 왜 표준 기호, 구문 및 동작의 보편적 인 세트를 제안하지 않는 사람이 있습니까?정규 표현식 표준이없는 이유는 무엇입니까?

+2

저는 같은 질문을 여러 번 물었고 좋은 대답을 찾지 못했습니다. 나는 www.regular-expressions을 찾은 것을 기쁘게 생각합니다.info – chilltemp

답변

16

표준은 IEEE associated with the POSIX effort입니다. 진짜 질문은 입니다. "왜 모두가 그걸 따르지 않습니까?"? 그 대답은 탐욕스러운 일치와 관련해서는 PCRE만큼 복잡하지 않다는 것입니다.

+6

그리고 추가 질문은 아마도 다음과 같습니다 : * 왜 POSIX 표준은 더 많은 구문을 포함하도록 다시/확장되지 않습니까? * 아마도 사람들은 그것을 따라하려고 시도 할 수도 있습니다. –

+0

@PeterBoughton : 가장 확실한 것은 ... 이제는 우리가해야 할 일은 누구나 우리가 얼마나 멀리 가고 싶은지 동의하는 것입니다. 나는 당신이 밖에서 확장 된 대부분의 RE보다 전체 파서로 더 나을 것이라는 견해를 가지고 있습니다. RE에서 주석이 필요한 경우 RE에 대해 너무 복잡합니다. –

+0

음, 예, 아니오. 전체 구문 분석기가 더 나은 옵션 일 수는 있지만, 일반적으로 간결한 코드는 아닙니다 (파서를 생성하기위한 소형/일반 DSL이없는 경우)? - 모든 표준은 사용되는 것을 다루어야합니다 (반드시 합리적인 방법이 아니더라도). –

2

제작 표준이 어렵 기 때문에. 정규 표현식처럼 복잡하게 만들지 말고, 공적인 표준으로 만들기에 충분한 것에 동의하는 사람들을 얻는 것은 거의 불가능합니다. Defacto 표준은 훨씬 쉽게옵니다.

사례 : HTML 5는 2022 년까지 공식 표준이 될 것으로 기대되지 않습니다. 그러나 초안 사양은 이미 사용 가능하며 표준의 주요 기능은 표준이 공식화되기 훨씬 전에 브라우저에 나타나기 시작할 것입니다.

+2

HTML5 - 2022 년에만 공식 추천이 될 것으로 예상되지만 2012 년까지 후보 추천이 될 것으로 예상됩니다. CSS2 (3이 아님)는 여전히 후보 추천 단계에 있지만 꽤 좋습니다 이 시점에서 널리 구현됩니다. HTML5는 2022 년 이전까지 완벽하게 사용할 수 있습니다. – ceejayoz

+9

2022 년 비행 차가 HTML5를 지원하는지 궁금합니다. – Chris

+0

CSS 2는 후보 추천이 아니며 전체 권장 사항이며 1998 년 이후입니다. CSS 2.1은 후보 추천이며 2007 년 중반 이후로 그 상태에 있습니다. –

0

Perl은 첫 번째 (또는 첫 번째에 가까운 danm)이며 perl이고 우리 모두가 좋아하지만 일부 사람들은 더 세련된 (즉, 기능) 필요하다고 생각합니다. 이것은 새로운 유형이 들어온 곳입니다.

그들은 nomalize하기 시작했습니다. .NET에서 사용되는 정규 표현식은 다른 언어에서 사용되는 정규 표현식과 매우 유사합니다. 천천히 사람들이 통일하기 시작했지만 일부는 익숙하지 않습니다. thier perl 방법 및 변화하고 싶지 않다.

+0

Perl은 1987 년 Wikipedia에 따라 발명되었습니다. grep의 날짜를 찾을 수 없지만 그보다 훨씬 빠르다고 확신합니다. 훨씬 더 이른 Unix에서의 구현이있을 수 있습니다. –

+1

Perl은 게임에서 꽤 늦게 나왔습니다 (http://en.wikipedia.org/wiki/Regular_expression#History). 헨리 스펜서 (Henry Spencer)는 초기 Perl에 통합되기 전에 80 년대 후반에 대부분의 내장을 썼다. 그러나 Spencer의 구현은 기존의 독점적 구현을 ​​대체하는 것이 었습니다. –

+0

고마워요. 나는 perl이 늙었다는 것을 알았지 만, 그것이 가장 오래된 것인지 확실하지 않았다. 요점은 여전히 ​​진화하고 있으며, 나는 그들이 서서히 수렴하기 시작했다고 생각합니다. – Aren

0

정식 버전으로 간주 될 정도로 인기있는 버전이 없었으며 표준 구현이 없었습니다. 와서 그것을 구현 한 모든 사람들은 그것을 "더 좋게"만드는 방법에 대한 자신의 생각을 가졌습니다.

8

사실, 정규 표현식 표준 (POSIX)입니다. 그러나 그것은 엉터리입니다. 따라서 사람들은 RE 엔진을 응용 프로그램의 요구 사항에 맞게 확장합니다. PCRE (Perl 호환 정규식)는 Perl의 RE 엔진과 호환되는 정규식의 의사 표준입니다. Perl의 엔진을 다른 응용 프로그램에 내장 할 수 있기 때문에 특히 유용합니다.

+6

어떤 방식으로 진절머리 나는가? –

1

나는 이것을 연구했지만 구체적인 것을 찾을 수 없었다. 내 생각에 정규 표현식은 종종 에 대해 도구에서 작동하는 도구이므로 플랫폼 및 도구 관련 확장이 반드시 필요하기 때문입니다.

예를 들어, Visual Studio에서 정규식을 사용하여 소스 코드의 문자열을 찾고 바꿀 수 있습니다. 그들은 다음과 같은 것을 추가했습니다 : 나는 식별자와 일치합니다. 다른 도구의 다른 플랫폼에서는 식별자가 적용 가능한 개념이 아닐 수 있습니다. 실제로 다른 플랫폼과 도구는 콜론 문자를 사용하여 식을 벗어납니다.

이러한 차이점으로 인해 표준화가 특히 어렵습니다.

+3

유효한 포인트이지만 표준은 "여기에 식별자가 일치하는 방법"을 표준화하지 않고 대신 "사용자 정의 일치 기호를 확장하는 방법은 다음과 같습니다"또는 그 밖의 모든 확장을 플랫폼간에 일관되게/예측 가능하게 구현할 수 있습니다. –

+0

@Peter 좋은 점은 표준이 그런 것들을 수용하기 위해 일반화 될 수 있다는 것입니다. 그렇게하면 읽기 쉽고 구현하기가 더 어려워집니다. (더 현명한 사람들을 겁 먹게 만들 수 있습니다 :). – Chris

-3

너무 많은 사람들이 정규 표현식을 두려워하기 때문에 아이디어를 생각하고 구현할 수있는 충분한 분별있는 사람들이 충분히 널리 보급되지 못했습니다.

표준 기관이 양식을 만들고 다른 맛을 통일하려는 경우에도 많은 프로그래머들이 그렇게 짜증나기 때문에 너무 많든 적든간에 자신의 접근 방식을 고집하는 사람들이 너무 많습니다.