정규 표현 식 에서 흔히 볼 수 있 는 4 가지 일치 모드 소결

0.앞 에 쓴다
오늘 은 정규 중의 일치 모델 을 배 워 보 겠 습 니 다.이른바 일치 모델 이란 정규 중의 일부 문자 일치 행 위 를 바 꾸 는 방식 을 말 합 니 다.예 를 들 어 일치 할 때 영문 자모의 대소 문 자 를 구분 하지 않 습 니 다.
우리 가 두 번 째 글 에서 배 운 탐욕 모델,비 탐욕 모델 과 독점 모델 을 기억 하 십 니까?이런 모델 들 은 정규 에서 양사 의 일치 행 위 를 바 꿀 것 입 니 다.오늘 은 양사 와 무관 한 일치 모델 을 보면 모두 4 가지 가 있 습 니 다.각각 대소 문자 모델,점 호 통 배 모델,여러 줄 의 일치 모델,주석 모델 을 구분 하지 않 습 니 다.
1.대소 문자 구분 없 음
말 그대로 대소 문자 패턴 을 구분 하지 않 는 것 이 목표 문자열 의 Cat 와 일치 하고 싶 은 것 입 니 다.저 는 큰 고양이 CAT 인지 고양이 cat 인지 관심 이 없습니다.저 에 게 일치 만 해 주시 면 됩 니 다.
패턴 수정자 통과(?패턴 표지)의 방식 으로 표시 할 수 있 습 니 다.우 리 는 패턴 수정자 만 해당 하 는 정규 앞 에 놓 으 면 지정 한 모델 을 사용 할 수 있 습 니 다.
대소 문 자 를 구분 하지 않 는 영 어 는 Case-Insensitive 이 고 모델 표 지 는 이니셜 의 소문 자로 표시 하면(?i)위 에서 언급 한 밤 은 바로 이렇게 쓸 수 있다(?i)cat,보 세 요:
不区分大小写模式
이전 글에서 우 리 는 조별 과 인용 을 배 웠 습 니 다.만약 에 두 고양이 와 일치 하면(?i)(cat) \1:
连续匹配
대응 하 는 Python 코드 는 다음 과 같 습 니 다.

import re

result = re.findall(r"(?i)(cat) (\1)", "cat cat CAT Cat")
print(result)

  :[('cat', 'cat'), ('CAT', 'Cat')]
앞 뒤 두 cat 대소 문자 가 일치 하지 않 고 일치 할 수도 있 습 니 다.앞 뒤 대소 문자 가 일치 하 는 고양 이 를 맞 추 려 면 어떻게 해 야 합 니까?밖 에 괄호(?)를 붙 일 수 있 습 니 다.i)cat)\\1,보 세 요:
连续匹配,相同大小写
테스트 링크:https://regex101.com/r/tPXuGX/1
메모:Python 언어 에서 re 라 이브 러 리 를 사용 하여 위의 정규 규칙 을 호출 하면 아래 의 이상 을 보고 합 니 다.regex 라 이브 러 리 로 바 꾸 면 되 지만 두 대소 문자 가 일치 하 는 cat 와 정확하게 일치 하지 않 습 니 다.
DeprecationWarning: Flags not at the start of the expression

import regex

result = regex.findall(r"((?i)cat) (\1)", "cat cat CAT Cat")
print(result)

  :[('cat', 'cat'), ('CAT', 'Cat')]
2.포인트 연결 모드
제1 편에서 우 리 는 원 문자 에 관 한 지식 을 배 웠 고 영어 로 기억 하 는 점 을 배 웠 습 니 다.어떤 의 미 를 대표 합 니까?임 의 문자 와 일치 할 수 있 지만 줄 을 바 꿀 수 없습니다.진정한 임의의 문자 가 필요 할 때[\s\S]나[\d\D]또는[\w\W]등 을 사용 하여 표시 할 수 있 습 니 다.
特殊单字符
그러나 이렇게 쓰 는 것 은 우아 하지 않 기 때문에 영어 의 모든 문 자 를 일치 시 킬 수 있 는 모델 을 제공 합 니 다.이런 모델 을 점 호 통 배 모델 이 라 고 합 니 다.
점 호 통 배 모드 는 여러 곳 에서 단행 모드 라 고 불 리 며 영 어 는 Single Line 이 라 고 표시 하고 이니셜 을 취하 기 때문에 단행 모드 에 대응 하 는 수식 자 는(?s),밤 을 들 어 라.
点号通配模式
3.여러 줄 일치 모드
정규 에서^전체 대상 문자열 과 일치 하 는 시작 에 사용 합 니 다.$사용자 가 전체 대상 문자열 과 일치 하 는 끝:
非多行匹配模式
표현 식 이 각 줄 의 시작 과 끝 에 일치 하도록 하려 면 여러 줄 의 일치 모드 가 등장 합 니 다.여러 줄 의 영 어 는 Multiline 이기 때문에 여러 줄 모드 에 대응 하 는 수식 자 는(?m),효과 보기:
多行匹配模式.png
4.주석 모드
우리 가 긴 표현 식 을 쓴 후에 그 때 는 너 와 하나님 만 이 그것 이 무슨 뜻 인지 알 았 을 것 이다.반년 이 지나 면 하나님 만 이 그것 이 무슨 뜻 인지 알 았 을 것 이다.
주석 의 영 어 는 Comment 이 므 로 주석 모드 에 대응 하 는 수식 자 는(?\#comment)이니셜 을 사용 하지 않 았 고\#번호 가 하나 더 생 겼 습 니 다.우리 가 전에 쓴 IPv 4 주소 와 일치 하 는 정규 예 를 들 어 보 겠 습 니 다.

^(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?#comment IP )(?:\.(?:0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}(?#comment IP )$
많은 프로 그래 밍 언어 에서 도 x 모드 를 제공 하여 정규 를 쓰 고 주석 역할 을 할 수 있 습 니 다.Python 을 예 로 들 면:

import re

regex = r'''(?mx)  #        x  
^          #   
(\d{4})    #  
(\d{2})    #  
$          #   
'''

result = re.findall(regex, '202006
202106') print(result) :[('2020', '06'), ('2021', '06')]
x 모드 에서 모든 줄 바 꿈 과 빈 칸 은 무 시 됩 니 다.일치 하려 면 줄 바 꿈 과 빈 칸 을 바 꾸 거나 문자 그룹 에 넣 을 수 있 습 니 다.

import re

regex = r'''(?mx)  #        x  
^          #   
(\d{4})    #  
[ ]        #   
(\d{2})    #  
$          #   
'''

result = re.findall(regex, '2020 06
2021 06') print(result) :[('2020', '06'), ('2021', '06')]
5.마지막 에 쓴다
마지막 으로 위 에서 말 한 내용 을 요약 한다.
思维导图
정규 표현 식 온라인 검사 도구:https://regex101.com/
정규 표현 식 에서 흔히 볼 수 있 는 4 가지 매 칭 모드 소결 에 관 한 글 은 여기까지 입 니 다.더 많은 정규 표현 식 매 칭 모드 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기