내 눈 에 보 이 는 정규 표현 식 (입문)

6615 단어
신인 에 게 는 골 치 아 픈 이름 으로 냄새 를 맡 고 두려움 을 자아 낸다.하지만 내 가 보기 에는 정규 가 그렇게 신 비 롭 지 않다.
정칙 을 접 한 지 3 년 이 넘 었 을 것 이다. 나 도 내 가 어떻게 정칙 을 두려워 하 는 시 기 를 보 냈 는 지 모 르 겠 고 작은 동네 에서 정칙 강자 가 되 었 다.
오늘 은 제 가 정규 에 대한 이 해 를 바탕 으로 제 눈 에 보 이 는 정규 를 간단하게 묘사 하고 정규 신인 들 이 정규 에 대한 두려움 을 없 앨 수 있 기 를 바 랍 니 다.
먼저 요약 하고 정규 3 단 논 법:
정박지
1. 입문: 정규 문 자 는 정규 문자 에 대해 많은 글 을 말 할 수 있 습 니 다. 무려 한 편의 글 이 있어 야 설명 할 수 있 습 니 다. 저 는 여기 서 말 을 많이 하지 않 습 니 다. 저 에 게 평소에 자주 사용 하 는 것 은 다음 과 같 습 니 다.
  • . 줄 을 바 꾸 는 임의의 문 자 를 포함 하지 않 고 phop 의 s 수정자 아래 줄 을 바 꿀 수 있 습 니 다. 예 를 들 어 $pattern='#<div>(.*?)</div>#s'; div 내용 과 줄 을 바 꾸 는 데 이 터 를 일치 시 킬 수 있 습 니 다.
  • \s 스페이스 바, tab
  • * 0 개 이상 일치
  • + 하나 이상 일치 하 는 것, 즉 하나 이상
  • \ 전의
  • 특수 문자 앞 에 \ 를 붙 이면 전 의 를 나타 내 고 이 를 일반 문자 로 사용 하 는 것 을 설명 한다.
  • [] 한 글자 로 하 나 를 가 져 옵 니 다. 예 를 들 어 [abc] 가 일치 합 니 다 a b c
  • 그러나 []^ 를 더 하면 이 문 자 를 제외 하 는 것 이 된다. 예 를 들 어 [^abc] a、 b、 c 을 나타 낸다. 또한 [] 에서 사용 할 수 있다 - 는 하나의 범 위 를 나타 낸다. 예 를 들 어 [0-9] 는 0 에서 9 까지 비슷 한 것 은 [a-zA-Z] 도 있다. - 문 자 를 포함 하려 면 전의 [\-] 를 붙 일 수 있다.
  • ^ 문자열 시작
  • 여기 서 ^ 는 [] 에 사 용 된 ^ 과 같은 문자 이지 만 같은 뜻 이 아 닙 니 다. 여기 서 전체 문자열 의 시작 을 나타 냅 니 다. 예 를 들 어 ^wwwwww 로 시작 하 는 문자열 을 표시 합 니 다. 구분 에 주의 하 세 요. [] 에 없 는 것 은 시작 문자 입 니 다. 안에서 제외 합 니 다.
  • $ 문자열 끝
  • {1,3} 순환 횟수 [0-9]{1,3} 는 0 - 9 범위 내 에서 1 개, 2 개 또는 3 개 를 순환 한 결과 5, 20, 415 등
  • 이 있 을 수 있다 고 밝 혔 다.
  • ? 두 가지 용법 (1) 이 하나 또는 0 개 와 일치 합 니 다. 예 를 들 어 https? 이 일치 하 는 https (하나 s) 또는 http (0 개 s) (2) 비 탐욕 모드
  • 탐욕 이 아 닌 모드 란 가능 한 한 적은 내용 과 일치 하 는 것 입 니 다. 예 를 들 어 원본 문자열 에 대해 서 는...
    <div>
    a
    </div>
    <div>
    b
    </div>

    사용 <div>(.*?)</div> 하면 2 개의 결 과 를 얻 을 수 있 습 니 다.
    <div>
    a
    </div>

    화해시키다
    <div>
    b
    </div>

    첫 번 째 </div> 를 만나면 비 탐욕 모델 은 더 이상 찾 지 않 기 때문이다.<div>(.*)</div> (탐욕 모드) 를 사용 하면 전체 문자열 을 얻 을 수 있 습 니 다.
    <div>
    a
    </div>
    <div>
    b
    </div>

    뒤쪽 에서 찾 을 수 없 을 때 까지 모든 문자 와 일치 하기 때 문 입 니 다 </div>.
  • | 여러 데이터 중 하 나 를 선택 하 십시오 (다 중 문자 에 자주 사용) 앞에서 언급 한 [] 안의 문 자 는 하나의 문자 기능 을 선택 합 니 다. 그러나 하나의 문자 가 아니라면 http | ftp | svn 은 | 으로 나 누 어야 합 니 다. | 의 역할 도 메 인 은 괄호 를 만 날 때 까지 계속 뒤로 갑 니 다. 예 를 들 어 소스 문자열
  • http abc
    ftp abc
    svn abc
    http|ftp|svn abc 일치 하 는 결 과 는:
    http

    화해시키다
    ftp

    화해시키다
    svn abc

    일치 http abcftp abcsvn abc 를 일치 시 키 려 면 괄호 로 앞의 협 의 를 묶 어야 한다. 예 를 들 어 (http|ftp|svn) abc 는 기대 하 는 결 과 를 얻 을 수 있다.
  • () 데이터 분계 와 데이터 추출
  • 위의 예 (http|ftp|svn) abc 는 데이터 분계 의 예 이다. 그 다음 에 일치 하 는 결 과 는 하나의 [1] 부분 집합 데 이 터 를 얻 을 수 있다. 여기 가 바로 서브 모델 의 개념 이 고 서브 모델 을 이용 하여 추출 하고 자 하 는 데 이 터 를 얻 을 수 있다.하위 모드 1, 2, 3 의 계산 방법 은 왼쪽 괄호 의 계산 이다. 왼쪽 에서 오른쪽으로 1 부터 시작한다. 예 를 들 어 (http|ftp|svn)://([^/]+), [1] 에서 얻 은 것 은 (http|ftp|svn) 안의 데이터 이 고 [2] 에서 얻 은 것 은 ([^/]+) 안의 데 이 터 를 괄호 안에 넣 는 것 도 왼쪽 괄호 를 찍 으 면 된다.
  • (?:) 비 포획 팀 은 () 하위 모델 로 서 그 안의 데 이 터 를 얻 을 수 있다 고 말 했다. 그러나 어떤 때 는 () 데이터 분계 기능 일 뿐 꺼 낼 필요 가 없다. 이 럴 때 비 포획 팀 의 개념 을 사용 해 야 한다.예 를 들 어 (http|ftp|svn)://([^/]+) 도 메 인 이름, 즉 [2] 만 얻 으 려 면 (http|ftp|svn) 데이터 분계 의 기능 일 뿐 여 기 는 캡 처 할 필요 가 없 기 때문에 비 캡 처 그룹 기능 을 사용 하고 (?:http|ftp|svn) 이 부분의 데 이 터 를 차단 하여 얻 으 려 면 (?: 이 왼쪽 괄호 는 [1], [2] 계수, 즉 (?:http|ftp|svn)://([^/]+) 중의 ([^/]+)[1] 로 바 뀌 어야 한다.됐어.

  • 상용 문자 의 사용 차이 가 많 지 않 습 니 다. 그리고 더 많은 것 은 정규 표현 식 30 분 입문 튜 토리 얼 을 참고 하 십시오. 이것 은 제 가 비교적 전면적 인 정규 입문 자 료 를 본 것 입 니 다.
    2. 조작: 정박 점 의 모든 정규 가 목적 성 이 있 고 이렇게 해 야 의미 가 있다.따라서 정규 를 쓰기 전에 분석 하고 자 하 는 데 이 터 를 관찰 하고 유일한 닻 점 을 찾 으 세 요. 예 를 들 어 한 페이지 의 title 라벨 을 분석 하고 title 내용 을 얻 으 려 면 이 title 이 닻 점 입 니 다.때때로 추출 하고 자 하 는 데 이 터 는 확실히 유일한 닻 점 을 찾 을 수 없다. 그러면 데 이 터 를 분해 할 수 있다. 먼저 유일한 닻 점 을 통 해 데이터 블록 을 잠 그 고 추출 한 후에 이 데이터 블록 에 대해 데 이 터 를 추출 하면 된다.예 를 들 어 원본 문자열 이 있 습 니 다.
    <div id="module_1">
        <div class="content">
                  content 1
        </div>
    </div>
    <div id="module_2">
        <div class="content">
                  content 2
        </div>
    </div>

    class = "content" 를 통 해 데 이 터 를 직접 일치 시 키 면 분명히 두 개 를 얻 을 수 있 습 니 다. 그러면 데이터 필드 를 확장 할 수 있 습 니 다. 먼저 id = "module 1" 을 닻 점 으로 하여 전 체 를 가 져 올 수 있 습 니 다.
    <div id="module_1">
        <div class="content">
                  content 1
        </div>
    </div>

    그리고 이 데이터 블록 에 대한 데이터 처 리 를 통 해 class = "contents" 의 내용 을 얻 으 면 됩 니 다.따라서 여기에 두 개의 정규 가 사용 된다.
    (1) <div id="module_1">(.*?)</div>\s*<div id="module_2"> (2) <div class="content">(.*?)</div>
    요약: 닻 점 은 당신 의 데 이 터 를 유일 하 게 찾 을 수 있 는 표지 입 니 다.
    3. 조작: 소음 제거 란 소음 제거 라 는 것 은 무관 한 것 을 모두 뜬구름 으로 생각 하고 마스크 로 그것 을 넘 기 며 우리 가 원 하 는 데이터 에 만 관심 을 가 지 는 것 이다. 예 를 들 어 <meta content="text/html; charset=utf-8" http-equiv="content-type"> 여기 서 문자 집합 utf - 8 을 얻 으 려 면 어떻게 해 야 합 니까?우선, 포 지 셔 닝 닻 점 은 <meta, charset= 과 utf - 8 뒤의 " 이 있 고, 나머지 는 모두 뜬구름 입 니 다 ~ 따라서 정규 <meta[^>]*charset=([^"]+)" 를 얻 으 면 됩 니 다. 서브 모드 로 데 이 터 를 얻 으 면 [1] utf - 8 을 얻 을 수 있 습 니 다.
    결론: 관심 의 남 는 것, 관심 없 는 것 은 모두 뜬구름 이다.
    4. 조작: 데 이 터 를 추출 하 는 것 은 데 이 터 를 얻 는 것 에 관 한 것 이다. 위의 큰 편 에서 여러분 들 은 개념 이 있어 야 한다. 바로 서브 모델 을 이용 하여 얻 는 것 이다. 여기 서 더 이상 군말 하지 않 는 다.
    요약: 하위 모드 계수, 왼쪽 괄호 는 1 부터 비 포획 그룹의 왼쪽 괄호 를 제외 합 니 다.
    마지막 으로 여러분 들 이 즐 거 운 정규 여행 을 하 시 기 를 바 랍 니 다. 당신 은 반드시 그녀 를 사랑 하 게 될 것 입 니 다. 저 와 마찬가지 입 니 다.:)
    Zjmainstay 학습 노트 내 눈 에 정규 표현 식 발표

    좋은 웹페이지 즐겨찾기