펄 학습 노트 – Building a RegExp

오늘 디자인 문 서 를 봤 는데 데이터베이스 시트 를 어떻게 디자인 해서 환경 을 모 의 하 는 지 에 관 한 것 입 니 다. 디자인 이 잘 되 었 다 고 생각 합 니 다. 데이터 베이스 원리 인 그 책 과 맞 을 수 있 을 것 같 습 니 다.하루 를 보 니 머리 가 좀 크 네요. 집에 가기 전에 Perl 학습 노트 를 쓰 세 요. 번역 숙제 로 하 겠 습 니 다.Todd 는 회사 Wiki 에 페이지 를 만 들 었 습 니 다. 그 안에 그 가 쓴 실 용적 인 스 크 립 트 가 있 습 니 다. 나중에 배 우 겠 습 니 다.
 
목적: 일치 하 는 숫자 (Numeric) 는 정형 일 수도 있 고 부동 점 일 수도 있 으 며 과학적 인 계수 일 수도 있 고 양음 호 를 가 질 수도 있 습 니 다.
저 는 먼저 전체적인 사 고 를 발췌 하 겠 습 니 다. 이 사 고 는 일치 하 는 숫자 에 국한 되 지 않 습 니 다. 이것 은 정규 표현 식 을 구축 하 는 일반적인 사고 입 니 다.
  • 상세 한 설명 수요 (Specify the tasks in detail)
  • 문 제 를 하위 문제 로 분해 (Breaking down the problem into smaller parts)
  • 하위 문 제 를 정규 표현 식 으로 표시 합 니 다 (Translating the small parts into regexps)
  • 하위 문 제 를 해결 하 는 정규 표현 식 통합 (Combining the regexps)
  • 전 체 를 최적화 한 결과 (Optimizing the final combined regexp)
  • 사실 많은 것들 이 서로 통 하기 때문에 학 과 를 많이 섭렵 해 야 한다.위 에서 제시 한 5 가지 절 차 는 알고리즘 서론 에서 도 언급 한 적 이 있 는데 이것 이 바로 전형 적 인 Divide and Conquer 의 사고 이다.아마 현실 생활 에서 부 딪 히 는 많은 문제 들 도 이런 생각 일 것 이다.자, 쓸데없는 소리 하지 말고 한 걸음 한 걸음 하 자.
     
    Step 1: 목적 안에서 이미 비교적 상세 합 니 다. 조금 만 더 보충 하면 우 리 는 다른 각도 에서 고려 할 수 있 습 니 다. 어떤 때 는 한 사물 을 정면으로 표현 하지 못 할 때 부정적인 면 으로 묘사 할 수 있 습 니 다. 예 를 들 어 숫자 와 일치 하지 않 는 다 는 것 은 문자열 과 일치 하지 않 는 다 는 것 을 의미 합 니 다!
     
    Step 2: 서브 문 제 는 목적 에서 도 비교적 명확 하 게 주 었 습 니 다. 모두 두 가지 유형 입 니 다. 정수 와 부동 소수점 입 니 다. 모든 유형 은 과학 계수 법 을 사용 할 수 있 고 플러스 와 마이너스 가 있 을 수 있 습 니 다.그리고 마이너스 번 호 는 반드시 시작 / ^ / 에 나타 나 고 지수 부분 은 반드시 끝 / $/ 에 나타 납 니 다.
     
    Step 3: 양음 호 는 선택 할 수 있 기 때문에 / [+ -]? /.정수 표현 은 / d + / 입 니 다.소수 가 비교적 복잡 하고 세 가지 형식 이 있 는데 예 를 들 면 12, 12, 1.2 이다.이 세 가지 상황 에 대응 하여 정규 표현 식: / d +. /, / d + / 와 / d + d + / 를 각각 작성 합 니 다.그래서 무지 수 부분 에 대한 부동 소수점 표현 은:
    /[+-]?(d+.| .d+| d+.d+)/  ,perl - e 'print $1 if 123.45 = ~ / [+ -]?(d+.| .d+| d+.d+)/’;우 리 는 123.45 와 일치 하 기 를 희망 하지만, 결 과 는 123 과 일치 합 니 다.!왜 냐 면 문 제 는 일치 할 때 여러 가지 길 을 선택 할 때 왼쪽 부터 걷 고 통 하기 만 하면 다른 선택 을 하지 않 는 다 는 것 이다.123. 이미 일치 하기 때문에 아래 를 보지 않 겠 습 니 다. 틀 렸 습 니 다!'|' 동작 을 사용 할 때 조심해 야 합 니 다. 가능 한 한 조건 이 엄격 한 표현 식 을 앞 에 두 어야 합 니 다.여기 서 우 리 는 반드시 / d + d + / 를 / d + / 의 앞 에 놓 아야 한다.
    -bash-3.00$ perl -e ‘print $1 if 123.45=~/[+-]?(d+.d+|d+.|.d+)/’ 123.45
    이제 지수 부분 만 남 았 습 니 다. / ([eE] [+ -]? d +)? /,주의 지수 도 플러스 마이너스 가 있 습 니 다. 그리고 지수 부분 은 선택 할 수 있 습 니 다!
     
    Step 4: 논리 적 으로 이 문 제 는 / ^ (optional sign) (integer | f. p. mantissa) (optional exponent) $/ 로 표현 할 수 있 습 니 다.그래서 마지막 정규 표현 식 은:
    /^[+-]?(d+.d+|d+.|.d+|d+)([eE][+-]?d+)?$/
    
    Step5:            ,      ,      ,     ,       -:)

    좋은 웹페이지 즐겨찾기