정규 표현식이 병적으로 매력적으로 보이는 이유는 무엇입니까?


23

Exhibit 1 , Exhibit 2 , 다른 예제를 기억하기가 어렵지 않다고 생각합니다.

문제 : 문제를 해결하는 방법이 두 가지 이상인 경우 PHP 프로그래머 (일반적으로 StackOverflow에서 PHP 태그를 탐색 함)는 정규 표현식과 관련된 솔루션에 대한 도움을 요청합니다.

경우에도 덜 경제적 것, 경우에도 PHP 매뉴얼은 (제안 링크를 ) 사용하는 str_replace모든 대신 preg_*또는 ereg_*더 멋진 대체 규칙이 필요하지 않습니다 때 기능.

왜 이런 일이 발생했는지에 대한 단서가 있습니까?

내가 잘못 이해하지 마라. 내 가장 친한 친구 중 일부는 정규 표현이며 Perl을 멸시하지 않는다. 내가하지 않는 것은 아무 대안이 찾는 이유 (스위치 문자열에 정규식)이 과잉이 명백한 경우에도 무엇이든지,하지 또는 코드의 복잡성 (HTML에서 데이터를 가져 오기위한 정규식을 기하 급수적으로 상승 PHP에서 )


2
PHP 매뉴얼이 실제로 말하는 것을 인용하고 싶을 수도 있습니다.
ChrisF

1
그들은 비밀 스럽기 때문에 독점적 인 kewl kidz '클럽의 일원이되고 싶습니까? 그리고 주로 일치 또는 추출을 표현하는 짧은 방법을 제공하기 때문입니다. 더미 경우에는 물론 사용자 정의 구문 분석이 더 좋지만 빠른 정규 표현식을 작성하는 데 소요되는 시간은 정규 표현식을 선호합니다.
haylem

당신은 그 마지막 문장의 잘못된 부분을 강조했습니다.
Izkata

답변:


20

정규 표현식이 병적으로 매력적으로 보이는 이유는 무엇입니까?

잠재 의식 수준에서 그들은 포괄하고 자체 조정하는 (패턴을 생각하면서) 자체적으로 많은 것을 달성 할 수있는 전체 스마트 프로그램처럼 느껴집니다.

그렇기 때문에 사람들은 정규 표현식이 텍스트 기반 작업을 해결할 것이라고 즉시 생각합니다.

마법의 힘이 담긴 작은 것. 안된다고 말할 수 없습니까?


5
+ 1- 작은 비밀스러운 일.
AJ Johnson

습관은 까다 롭다
Ben DeMott

49

당신이 가진 유일한 도구가 정규 표현식이면 모든 문제는 다음과 같습니다. ^((?>[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$


16
이 답변을 선택하려는 유혹은 너무나 강하지 만, 여기에 첫 번째 질문이 있기 때문에 저항해야한다고 생각합니다.
cbrandolino

1
@Dev, 그것은 많은 의미가 있습니다. 내 의견은 아마도 답변에 대한 감사를 표현하는 재미있는 방법이었습니다.
cbrandolino

17
지구상에서 무엇이 일치합니까?
Tom O'Connor

4
나는 몰라 ... 나는 이것의 전체를 요약합니다. 정규식을 알고 다른 방법에 대해 모른다면 왜 보러 갈까요? 올바르게 수행하면 작업을 처리하는 도구가 이미 있습니다. 그들이 더 간단한 방법을 우연히 발견하거나 그것에 대해 알 때까지 정규식은 필요한 것보다 더 복잡하더라도 포괄적 인 방법이 될 것입니다.
Aeo

4
@Tom O'Connor RFC 2822 이메일 주소와 일치하는 것이 Regex와 비슷하다고 생각하지만 마크 다운으로 혼란을 겪고 있었기 때문에 몇 문자를 꺼내야했습니다.
glenatron

23

그 이유는 다음과 같습니다.

  1. 그것들은 동등한 코드와 비교하여 환상적으로 간결합니다 (올바르게 사용될 때).
  2. 이들은 프로그래밍 언어에 걸쳐 광범위하게 지원되므로 대부분의 개발자가 익숙합니다.

3
# 2 의미가 있습니다.
cbrandolino

23

내 경력의 초기 단계 (예 : PHP 이전)에서 저는 Perl 전문가였으며 Perl 전문가의 주요 측면 중 하나는 정규 표현의 숙달입니다.

현재 팀에서는 말 그대로 다른 도구 (일반적으로 nastier) 도구보다 정규식에 도달하는 유일한 사람입니다. 그들은 팀의 나머지 부분처럼 순수한 마법 인 것 같습니다. 그들은 내 책상으로 넘어 가서 문자 그대로 정리하는 데 10 초가 걸리는 정규식을 요청한 다음 작동 할 때 날려 버릴 것입니다. 잘 모르겠습니다. 나는 그들과 오랫동안 협력 해 왔으며,이 시점에서 자연 스럽습니다.

정규 표현식이없는 경우 strstr 및 strpos 문을 래핑하는 흐름 제어 문을 조합하여 남겨두고 머리에서 추악하고 실행하기가 어렵습니다. 나는 30 줄의 문자열 검색보다 우아한 정규 표현식 하나를 만드는 것이 훨씬 낫습니다.


2
나는 이것을 충분히지지 할 수 없다.
CaffGeek

8
궁금합니다 : 정규 표현식을 쓸 때 유창하게 읽으 십니까?
peterchen

7
정규 정규식 교육 세션을 개최하거나 코드에서 지옥을 문서화하기를 바랍니다. 그렇지 않으면 당신은 동료들을위한 지원 악몽을 만들고 있습니다. 그 정규 표현식을 작성함으로써 절약 한 시간은 "우아한 정규 표현식"이하는 일을 이해하려고하는 사람들에 의해 백 번 이상 손실 될 수 있습니다.
Jeff Knecht

3
그래서 큰. 이 주석에서 사랑하는 것과 싫어하는 정규 표현식 사이의 줄다리기를들을 수 있습니다.
Dan Ray

1
@ Ben Lee : 그렇게 생각합니다-OTOH, 야생에서 주석이 달린 정규 표현식을 본 적이 없습니다. 정규 표현식의 문제 중 일부는 시원함을 기반으로 할 수 있습니다.
peterchen

16

반대로. 사람들은 정규 표현식이 너무 자주 IMO 인 악한 밈을 파문하고 있습니다. preg_match가에서 과도하게 사용 된 php것은 분명하지만, 종종 PHP에서 그렇게하는 것이 현명하다는 것은 분명하지 않습니다.

필자는 지금까지 PHP 함수에서 문자열 함수를 사용하는 또 다른 미세 최적화라고 추측합니다. 많은 유용한 정보가 있으며 일반적으로 더 나은 선택입니다. 그러나 preg_match여러 체인 strposif체인 에 찬성 해서는 안됩니다 . 실제로 libpcre는 PHP가 문자열 대안을 찾는 루프를 실행할 수있는 것보다 빠릅니다.

최근 예제에서 문자열이 모두 소문자인지 테스트하는 것을 깨달았습니다.

 if ($string == strtolower($string))

다음보다 더 읽기 쉽습니다.

 if (!preg_match("/[A-Z]/", $string))

그리고 모든 HPP이기 때문에 첫 번째가 더 빨라야한다고 가정합니다. 그러나 실제로 정규 표현식은 문자열을 한 번만보고 대문자를 찾으면 부정 조건을 중단 할 수 있습니다. 그러나 strtolower () 접근 방식은 문자열을 두 번 살펴 봅니다. 먼저 strtolower ()는 각 문자를 반복하고 비교하고 대문자를 사용하여 문자열을 복제합니다. 그런 다음 ==원본과 사본을 반복하여 다시 한 번 비교합니다.

따라서 분명한 경우는 아닙니다. 그리고 객관적으로 첫 번째 문자열은 대개 짧은 문자열을 비교하기 때문에 더 빠릅니다. 그러나 PHP 문자열 함수가 항상 정규 표현식보다 바람직하다는 가정하에 맹목적으로 가서는 안됩니다.

( xhtml-regexes에 관한 @bobince의 재미있는 답변 과 최근에 매우 도움이되지 않는 방식으로 연결되는 방법에 대한 또 다른 분노를 추가하고 싶습니다 . 아래의 더 객관적인 답변은 무시됩니다.)


1
나는 당신의 모범에 동의합니다. 여전히이 특별한 경우에는 어쨌든 'strtolower ()'를 선호합니다. 중요하지 않은 코드에서는 다른 구현에 비해 큰 실행 시간 최적화조차 중요하지 않습니다-소문자를 평가하지 않으려는 경우 거대한 텍스트 파일의 장점이 있지만 유용한 경우를 상상할 수 없습니다.
cbrandolino

1
@cbrandolino : 토론이 없습니다. 이 내용은 모든 것이 관련성이 있고 중첩 루프에 대해 평가되어야하며 , 실제로 차이 가 생길있습니다 .
마리오

4
+1 사람들은 항상 지원되는 것보다 훨씬 더 많은 것을 강타합니다.
Orble

1
"regexp bashers"의 하나로서 : 한 줄짜리 줄이 "manual"문자열 파싱이 30 줄을 필요로하는 것을 다소 표현하는 것이 재미있다. 그러나 유지 보수는 가장 현실적인 예에서 어려움을 겪습니다. 또한 검증되지 않은 입력에 적용하려는 경우 거부 된 입력에 적합한 진단을 생성하려면 추가 곡예가 필요합니다. 저에게는 프로토 타입의 "쓰기 전용"코드입니다. 빠른 스크립트에는 적합하고 오래 지속되는 앱은 짜증납니다.
peterchen

1
/x인지 청크의 팔꿈치를위한 공백을 허용하기 위해 모드 에서 모든 정규식을 작성하지 않는 사람은 물론, 왜 일이 수행되고 있는지를 설명하기 위해 주석을 달아야합니다. 그러나 합리적인 복잡성의 실제 정규 표현식의 경우 문법 정규 표현식을 통해 하향식 디자인을 적용하는 것을 고려해야 합니다. 일단 빛을 본 후에는 다시 돌아 가지 않을 것 /@#$^^@#$^&&*)@#/입니다.
tchrist

8

정규식은 정규 언어를 구문 분석하는 데 가장 적합한 도구이기 때문에 매우 매력적입니다.

다음과 같은 장점이 있습니다.

  • 그들은 간결하다 . 일반적으로 정규 표현식보다 생성 한 특정 알고리즘을 사용하여 특정 일반 언어를 구문 분석하는 데 훨씬 더 많은 코드가 필요합니다.
  • 그들은 빨리 사용합니다. 일반적으로 정규 표현식보다 당신이 생각해 낸 특정 알고리즘을 사용하여 특정 정규 언어에 대한 파서를 작성하는 데 더 많은 시간이 걸립니다.
  • 그들은 쉽다 . 특수 문자 세트와 그 의미를 배우면 정규 표현식을 작성하는 것이 쉽습니다 (약간 읽기는 어렵지만). 정규 표현식은 언어 자체입니다. 우리 종이 언어를 매우 잘 발달시키기 때문에 유용한 특성입니다.
  • 그들은 빠르다 . 컴파일되면 NO ( N) 시간 의 문자열 길이와 일치 할 수 있습니다 .
  • 그들은 유연하다 . 어떤 정규 언어와도 일치 할 수 있으며 많은 데이터가 정규 언어로 표현됩니다.
  • 그것들은 어디에나있다 . 대부분의 프로그래밍 언어는 외부 라이브러리를 통해 또는 언어 자체에 포함 된 기본 정규 표현식 지원을 갖습니다. 정규 표현식 언어 자체에는 너무 많은 변형이 없습니다.

이것은 그들이 적합한 상황에 매력적이지만 사람들은 다음과 같은 이유로 자신이 가장 적합한 도구가 아닌 상황에서 사용할 수 있습니다.

  • 일치하는 것을 정규 표현식 (예 : HTML)을 사용하여 표현할 수 없다는 것을 이해하지 마십시오.
  • 게으르다 (나쁜 방법으로)-그들은 도구를 알고 있으며 그들이하는 일에 가장 적합한 도구는 아니지만 시간의 95 %가 문제없이 작동하고 특정 학습에 95 %의 노력이 필요하다는 것을 알고 있습니다. 파서 또는 처음부터 작성.
  • 그들은 더 나은 도구가 존재한다는 것을 인식하지 못합니다.

어, 나는 그들이 진행하는 가장 좋은 방법은 아니지만 여전히 사용되는 특정 사례를 언급하고있었습니다. 나는 정규 표현식을 좋아하고 (심지어 지루하고 생명이 없지만 여전히 어떤 상황에서는 매우 유용하다는 것을 알았습니다) 그들의 장점이 무엇인지 알고 있습니다.
cbrandolino

나는 나머지에 동의하지만 빠르고 쉽습니다? 학습 곡선은 가파르다 : 초보자의 경우 표현이 효과가없는 이유 를 파악하기가 어렵고 모든 정규 표현식 구현에는 적어도 미묘한 차이가있는 것처럼 보이므로 oyu는 어디서 배우려고하는지주의해야합니다.
peterchen

모든 사람이 완전한 웹 페이지를 전체 구문 분석 트리로 완전히 구문 분석하는 데 약간의 HTML을 꺼내는 것을 혼동하는 이유는 무엇입니까? 정말 바보입니다. 에서 HTML 페이지를 편집 할 때 vi내가 사용 :%s/foo/bar/gc하는 삶에 베팅하십시오 . 편집기에 충분하면 스크립트에 충분합니다.
tchrist

6

흠, 나는 단지 추측 할 수있다. 어쩌면 일부 사람들은 30 줄의 코드가 20 자 길이의 정규 표현식으로 대체 된 것을 경험했기 때문에 정규 표현식을 사용할 수있을 때 대신 다른 것을 사용하는 것이 잘못이라고 생각합니다.


4

일부 사람들의 생각과 일치합니다. 나는 그것들을 좋아하지 않지만 정규 표현식으로 생각하는 친구가 있습니다. 나는 그들의 두뇌의 패턴 매칭 부분이 형식적인 논리보다 노출되어 있다고 생각합니다. :-)


6
우리의 진화 역사의 관점에서 볼 때 이성. 우리는 문법을 정의하거나 실로 즘을 발견하기 오래 전에 패턴을 일치 시켰습니다.
glenatron

1
나는 프로그래밍에 논리와 패턴 매칭, 두 가지 영역이 관련된다는 것에 동의하지 않는다. 정규 표현식은 패턴 일치에 매우 뛰어나 므로 이러한 작업에 사용해야합니다. "나는 그들을 좋아하지 않는다"고 말하면 특정 직업에 대한 좋은 도구를 버리는 것입니다.
Orbling

@Orbling : 문제는 좋든 나쁘지 않은지, 왜 어떤 사람들은 그들을 남용하고 다른 사람들은 그렇지 않습니까?
Lennart Regebro

질문이 될 수도 있지만, 당신의 대답은 둘 중 하나가 아니라 하나 또는 다른 유형의 마음이 작용하고 있음을 시사합니다.
Orbling

나는 "추천"이 올바른 단어라고 생각하지 않습니다.
Lennart Regebro

3

정규식의 편재는 편재의 편재 때문이라고 생각합니다. 문자열은 가장 간단한 데이터 구조이며, 대부분의 사람들이 가장 먼저 배우는 구조입니다. 모든 코드는 기호 형식으로 작성되었으므로 프로그래머가 기호 형식으로 무언가를 모델링하는 것이 당연합니다. 그러나 영리한 새로운 상징적 형태에 대한 구문을 확장하려고 할 때 우리의 프로그래밍 언어가 저항을 제공한다면 모두 따옴표로 묶습니다. 관계형 데이터 모델에는 SQL이 있습니다. XML 데이터 모델에는 XQuery가 있습니다. 그러나 겸손한 문자열 데이터 모델은 어떻습니까? 정규식!

어제 HTML5 게임 개발을 지원하는 새롭고 반짝이는 자바 스크립트 프레임 워크를 API에서 찾고있었습니다. 게임에 필요한 주요 서브 시스템을 설명하기위한 선언적 메커니즘이 있습니다. 이러한 기능을 어떻게 지정합니까? JSON? 유창한 점 표기법? 배열? Nope-쉼표로 구분되고 공백으로 구분 된 기능 이름 목록이 포함 된 문자열입니다. 목록을 구문 분석하는 방법이 궁금합니다 ...?


2

한 번에 모든 것을 볼 수 있기 때문입니다. 모든 것을 볼 수 있기 때문에 작업하기가 더 쉬울 수 있으며 항상 좋습니다. 많은 C ++ 프로그래머들이 여전히 printf-type 문을 사용하는 이유와 비슷합니다. gcc는 typesafe가 아니고 (최소한 gcc는 printf 문에서 유형을 확인할 수 있지만) 예쁘지는 않지만 소년은 작고 사용하기 쉽습니다.

정규 표현식으로 충분히 간단하다면 종종 작업을 수행하는 가장 좋은 방법입니다. 컴팩트 한 형태와 많은 기능으로 특정 작업에 완벽합니다. 정규식을 너무 복잡하게 만들면 더 이상 읽을 수 없거나 복잡한 정규식을 사용하여 간단한 문자열 연산을 통해 더 빠르게 수행 할 수있는 일을 할 때 문제가 발생합니다.

다른 강력한 도구와 마찬가지로 Regex는 너무 많거나 적지 않은 적절한 조정으로 사용해야합니다. 그리고 성능이 큰 문제가 아닌 한, 정규 표현식 하나가 일련의 문자열 연산보다 쓰기 속도가 빠르고 디버깅이 더 쉬울 수 있습니다.


2

흠, 현재의 대답은 기술적 인 측면에 너무 많은 센터, (가독성의 장점 / 단점 입니다 중요한 점). PHP 환경 / 커뮤니티로 조금 더 옮겨 보도록하겠습니다.

  • PHP는 Perls little stepsister 입니다. 그리고 Perl의 필수 부분은 정규 표현식입니다 (그것들을 발명하지 않았습니까?). 따라서 PHP에서 정규 표현식이 널리 보급되는 이유 중 하나입니다.
  • 사용 사례PHP 는 우연히 정규 표현식의 유스 케이스와 크게 다르지 않습니다. PHP는 HTML 페이지를 서로 붙일 때 구조적으로 사용됩니다. 그리고 정규 표현식은 텍스트에서 작동합니다. (WReach가 말한 것)
  • 마이크로 최적화 . 앞에서 언급했듯이 사람들은 속도 인식 후 정규 표현식 및 / 또는 PHP 문자열 기능을 자주 사용합니다. 정규 표현식에만 국한되지 않는 PHP 서클의 핵심 문제입니다.
  • 정규식이 내장되어 있습니다. 파이썬, 자바, C #, 루비? 가용성은 있지만 추가 모듈을로드해야하는 데 방해가됩니다. 그리고 핵심 기능인 PHP 또는 Javascript에서 사용법 패턴이 어떻게 다른지보십시오. 또 다른 전시회 : CSS가 더 많이 사용되는 CSS.
  • PHP 매뉴얼은 잘못이다. 종종 그렇습니다. 정규 표현식은 쉽게 발견 할 수 있으며,이 재미있는 사실은 지루하기 때문에 지루하기 때문에이 사실을 연기했습니다. 지독한 튜토리얼과 PHP 소개 책은 항상 정규 표현식에 대해 가르치지 만 교육에 실패합니다. 사용 사례 .
  • PHP 의 문자열 API 는 마술 따옴표와 네임 스페이스 \ 구분 기호를 가져온 사람들과 같은 사람들이 설계했습니다. Java보다 우수하지만 전체적으로 화려하지는 않습니다. 특히 문자열이 객체로 두 배가 될 수 있으면 (파이썬 참조) 문자열 함수가 정규 표현식을 능가 할 수 있습니다.

그러나 그것은 부수적 인 메모입니다. 어쨌든 그것은 일반적으로 일반적인 표현을 과도하게 사용하거나 줄이게 만드는 것은 대부분인지적이고 기술적 인 이유라고 생각합니다. 그러나 PHP와 그 사용자층은 그것을 합성하는 몇 가지 속성을 가지고 있으며, 왜 우리가 그것에 대해 더 많은 질문을하는지 (인용이 필요합니다!) 거기에서 "매우 매력적"입니다.


1

나는 일반적으로 정규 표현식을 좋아하는데, 대체해야 할 20 줄의 코드보다 읽기 쉽고 이해하기 쉽습니다. 짧은 정규식은 빠르게 읽고 이해하며 유지 관리가 비교적 쉽습니다 (표현식이 변경되는 경우 20 줄의 코드를 살펴 보는 것보다 한 줄만 변경할 수 있음). 그들이 잘못 사용되는 시간이 있지만 다른 많은 것들도 있습니다.

아마도 당신이 그것들을 너무 많이 남용하는 이유는 StackOverFlow의 PHP 섹션을 탐색하기 때문에 많은 미숙 한 PHP 프로그래머가 있다는 것을 알고 있기 때문입니다.


1

정규 표현식이 병적으로 매력적으로 보이는 이유는 무엇입니까?

그들은 아니다. 그들은 실제로 지옥처럼 추악합니다. 이해할 수없는. 그것들은 가능한 빨리 죽여야하는 가증입니다.

이제 이것은 작은 Perl 앱 ​​디버깅으로 돌아가겠습니다. 그것을 도울 수 없다; 불행히도, 그들은 여전히 ​​작업에 가장 적합한 도구입니다.


4
정규식이 "정규"도 "표현"도 아니라고 말하는 것을 좋아합니다.
Andrew Barber

2
그것들을 이해하지 못하면 추악하고 이해할 수 없습니다. 정규식을 선회하면 정말 우아합니다.
Dan Ray

1
-1 모든 프로그래머가 애매 모호하다고 판단한 후 다른 가능한 설명을 고려하지 않았습니다. ... 그들이 못 생겼거나 이해할 수 없다고 생각하는 이유를 설명하면 도움이 될 것입니다.
Macneil

1
@Macneil-제발, (그렇지만 제 생각은 그 선을 따라 있습니다), 당신이 저에게 말하지 않았거나 내가하지 않은 것에 대해 말하지 않았다고 언급하지 않는 한 (댓글의 첫 부분). 당신의 질문까지, 당신은 그것들이 아름답다고 생각합니까?! ...하지 않습니다. 이 사이트는 주관적인 사이트이므로 주관적인 의견이므로 자세히 설명 할 필요도 없습니다. 그 문제에 대해서도 시도하지 않을 것입니다.
Rook

1
@ Ruk-대부분의 사람들은 복잡한 정규 표현식을보고 모든 정규 표현식이보기 흉한 결정하고 생각을 멈 춥니 다. 사실, 당신이 그들에 대한 편견을 세울 수 있다면 그것들은 매우 우아하고 표현력있는 도구입니다. BTW는 독자적인 논리에 의해 많은 프로그래머가 대수를 수행 할 수 없으므로 대수는 본질적으로 악한 것이므로 이해하기가 쉽지 않기 때문에 폐지해야합니다.
Dan Ray

0

사람은 도구를 사용하는 생물이며 정규 표현식은 강력한 도구입니다. 정규 표현식에 대한 좋은 은유는 델리의 고기 슬라이서입니다. 칠면조, 콘비프 등의 종이 얇은 조각을 원한다면 그저 문제 일뿐입니다. 그러나 그것을 사용하려면 숙련 된 손이 필요합니다. 왜냐하면 실제로 자신을 심하게 자르고 피를 볼 때까지 느끼지 않을 것이기 때문입니다. 이것이 의미하는 바는 정규 표현식의 큰 문제는 그것들을 약간 벗어난 것입니다.


0

정규 표현식은 힘을 발휘하기 때문에 매우 매력적입니다. 매우 적은 수의 문자로 매우 복잡한 작업을 수행 할 수 있습니다.

문제는 표준 정규 표현식 구조가되어 있다는 것입니다 하지 -이 완료 튜링있는이 단순히 정규 표현식으로 구현할 수있는 프로그램은, 사람들이 없다는 것을 의미 알고 그들은 정규 표현식의 피상 전력에 의해 유인되는 때.

이것이 바로 "지금 그들이 가지고있는 jwz-quote의 이유입니다. 두 가지 문제 합니다.

나는 Perl 정규 표현식이 Turing-complete 라고 생각 하지만 분명히 결정적이거나 아직 입증되지 않은 것 같습니다.


0

유한 상태 머신을 프로그래밍하는 효율적인 방법이기 때문에 적용 할 때 강력한 도구입니다. 기본적으로 FSM 프로그래밍을위한 고유 한 언어입니다. 언어를 알고 있으면 도움이되고 모르면 짜증나게합니다.


0

내 경험에 따르면 정규 표현식은 고대 예술과 같이 모호한 것입니다. 일부 사람들은 관련된 마법을 이해할 수 없기 때문에 아무도 당신에게 설명하지 않기 때문에 분노합니다. 대학에서 전자 우편을 찾는 것보다 덜 사소한 것을 가르치는 것에 대해 들어 본 적이 없습니다. 대부분의 사람들이 이해하지 못하기 때문에 속도가 느려 야합니다. . 그리고 첫 시도에서 그들이 잘 작동하도록하는 것은 항상 새로운 이민자들에게 도전입니다.

Perl, awk, Linux 및 반짝이는 버튼이나 멋진 색상의 구문이없는 모든 것에 대해 똑같은 것을 말할 수 있습니다. 따라서 "사소한 작업"에 복잡성을 추가하는 것과 마찬가지로 루프, 스플릿, 스위치, 마법 등을 던져서 작동 할 수도 있습니다. 그러나 도로 반대편에 있다면 정규 표현식은 불쾌한 루프 또는 디버깅 할 항목이없는 신호 노이즈처럼 보이는 아름다운 쿠키 커터입니다. 나는 그들이 제공하는 유연성 때문에 그들을 좋아합니다. 일치하는 패턴이 변경되면 알고리즘이나 도구 / 기타가 아닌 정규식을 변경하면 멋지고 다시 작동합니다. 그리고 그것들은 마법의 문자열이기 때문에 원한다면 소스 코드 외부에 넣을 수 있습니다. 그리고 내가 perl을 생각하게하는 또 다른 것은, 만약 당신이 20 자 이상의 문자를 가진 정규식을 쓰면, 당신이 많은 것을 성취했다고 느낍니다. 적어도 나를 위해, 그것은 너무 깔끔하고 컴팩트합니다. 나는 게으른 프로그래머이기도합니다. 좋은 식별과 의견으로 많은 코드를 작성하고 믹스에 몇 가지 버그를 추가하는 것을 좋아하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.