>  기사  >  백엔드 개발  >  정규식 시작하기

정규식 시작하기

伊谢尔伦
伊谢尔伦원래의
2016-11-30 09:42:211308검색

cjx는 최근 크롤러 프로젝트를 진행하고 있는데 페이지에서 원하는 콘텐츠를 급히 캡쳐해야 하는데, 논리적인 판단을 통해 그것을 얻는 것이 너무 복잡합니다. 다행스럽게도 우리는 정규식이라는 강력한 도구를 가지고 있어 많은 일을 쉽게 수행할 수 있습니다. Cjx도 이전에 정규식에 대해 어느 정도 알고 있었습니다. 하지만 항상 이해가 불완전한 상태에 있었고 혼자서는 만족스러운 정규식을 효과적으로 작성하기가 어렵습니다. 최근에 저는 Jeffrey E.F. Fried가 쓴 Mastering Regular Expressions라는 책을 인터넷에서 발견했습니다. 첫 장을 읽고 문득 몇 가지 규칙을 쓸 수 있다는 걸 깨달았어요, 하하~~ cjx는 갑자기 패자에서 키 크고 돈 많고 잘생긴 사람으로 업그레이드 된 것 같은 느낌이 들었어요... 다음은 그 내용을 요약한 것입니다. 책의 첫 번째 장~

줄의 시작과 끝

아마도 가장 이해하기 쉬운 메타 문자는 캐럿 ^과 달러 기호 $일 것입니다. 텍스트 줄을 확인할 때 ^는 시작을 나타냅니다. 라인의 $는 끝을 나타냅니다.

독자는 문자에 따라 정규식을 이해하는 습관을 기르는 것이 가장 좋습니다. 예를 들어,

^cat는 cat

으로 시작하는 줄과 일치하지만, 대신

^cat는 첫 번째 문자로 c로 시작하고 그 뒤에 오는 줄과 일치합니다. a 다음에 t라는 텍스트가 옵니다.

두 해석의 결과에는 차이가 없지만, 새로 접한 정규식의 내부 논리를 문자별로 해석하면 이해하기가 더 쉽습니다.

여러 문자 중 하나와 일치합니다.

"grey"라는 단어를 검색해야 하는데 "grey"로 쓰여 있는지 확실하지 않은 경우 다음을 사용할 수 있습니다. 정규식 수식 구조 [...]. 이를 통해 사용자는 일반적으로 문자 그룹이라고 하는 어딘가에서 일치할 것으로 예상되는 문자를 나열할 수 있습니다.

그래서 gr[ea]y는 g를 먼저 찾은 다음 r을 찾은 다음 a 또는 e를 찾은 다음 마지막으로 y를 찾는 것을 의미합니다.

문자 그룹 내에서 문자 메타 문자 '-'는 범위를 나타냅니다. 과 같습니다. 원하는 대로 문자 범위를 일반 텍스트와 결합할 수도 있습니다.

[0-9A-Z_!.?]는 숫자, 대문자, 밑줄, 느낌표, 마침표 또는 물음표와 일치할 수 있습니다.

전용 문자 그룹

[...]을 [^...]으로 바꾸세요. 이 문자 그룹은 목록에 없는 모든 문자와 일치합니다. 예: [^1-6]은 1~6을 제외한 모든 문자와 일치합니다. 이 그룹 시작 부분의 ^는 제외를 의미하므로 여기에 나열되는 것은 일치시키려는 문자가 아니라 일치시키지 않으려는 문자입니다.

점을 사용하여 모든 문자를 일치시키세요

메타 문자는 모든 문자를 일치시키는 데 사용되는 문자 그룹을 작성하는 간단한 방법입니다. 표현식에서 "모든 문자 일치" 자리 표시자를 사용해야 하는 경우 점을 사용하는 것이 편리합니다.


은 모든 하위 표현식과 일치합니다.

메타 문자 |는 "또는"을 의미하는 매우 간결한 메타 문자입니다. 이를 활용하면 다양한 하위 표현식을 전체 표현식으로 결합할 수 있으며, 이 전체 표현식은 모든 하위 표현식과 일치할 수 있습니다.

선택 요소

이제 색상과 색상의 매칭을 살펴보겠습니다. 이들 사이의 차이점은 다음 단어가 이전 단어보다 u가 하나 더 많다는 것입니다. 이 문제를 해결하기 위해 coloru?r을 사용할 수 있습니다. 메타 문자 ?(즉, 물음표)는 선택적 옵션을 나타냅니다. 문자 뒤에 추가한다는 것은 해당 문자가 여기에 나타날 수 있다는 것을 의미하지만, 해당 문자의 발생이 성공적인 일치를 위한 필수 조건은 아닙니다.

기타 수량사:

+(더하기 기호) 및 *(별표)가 반복적으로 나타나는 경우 물음표와 유사하게 작동합니다. 메타 문자 +는 바로 앞의 요소가 한 번 이상 나타나는 것을 의미하고, *는 바로 앞의 요소가 여러 번 나타나거나 전혀 나타나지 않음을 의미합니다.
다음으로 높이 14의 수평선을 나타내는


와 같은 TAG를 살펴보세요. 또한 HR과 SIZE 사이에는 공백이 있어야 하며, 등호 양쪽에는 공백이 있어서는 안 됩니다. 그래서 웹페이지에서 그러한 HR을 찾고 싶다면
와 같이 표현을 작성합니다. 때로는 HR의 SIZE 값이 가변적인 경우가 많아 SIZE 속성이 존재하지 않을 수도 있습니다. 그런 다음 표현식은

괄호 및 역참조

지금까지 우리는 대괄호의 두 가지 용도를 살펴보았습니다. 1. 여러 옵션의 범위를 제한합니다. 2. 질문과 같은 수량어에 따라 여러 문자를 하나의 단위로 결합합니다. 표시 또는 별표 기능. 이제 역참조인 대괄호의 또 다른 용도를 소개하고 싶습니다. egrep에서는 일반적이지 않지만(인기 있는 GNU 버전에서는 이 기능을 지원하지만) 다른 도구에서는 매우 일반적입니다.
역참조를 지원하는 도구 소프트웨어에서 대괄호는 하위 표현식과 일치하는 텍스트를 "기억"할 수 있습니다. 이러한 텍스트가 무엇이든 메타문자 시퀀스 1은 이를 기억할 수 있습니다.

물론 표현식에 여러 개의 괄호를 사용할 수 있습니다. 그런 다음 1, 2, 3 등을 사용하여 첫 번째, 두 번째, 세 번째 대괄호 세트와 일치하는 텍스트를 나타냅니다. 대괄호는 여는 괄호 '('가 왼쪽에서 오른쪽으로 나타나는 순서대로 수행되므로 ([a-z])([0-9])12에서 1은 [a-z] 일치 내용을 나타내고 2는 [0을 나타냅니다. - 9] 콘텐츠 일치

마법의 탈출구
때로는 .+*?와 같은 일부 기호를 일치시켜야 할 수도 있지만 동시에 메타 기호라는 것을 알게 됩니다. 이러한 특수 메타 기호와 일치하도록

앞에 이스케이프 문자를 추가할 수 있습니다.

몇 가지 유용한 약어
t 탭 문자
n 줄 바꿈 문자
r 캐리지 리턴 문자
s 공백, 줄 바꿈, 탭 들여쓰기 등과 같은 모든 공백 문자. 모든 공백 문자
S s
w [a-zA-Z0-9]를 제외한 모든 문자는 w+에서 매우 유용하며 단어와 일치하는 데 사용할 수 있습니다.
W w를 제외한 모든 문자
d [0-9], 즉, 숫자
D d를 제외한 모든 문자, 즉 [^0-9]


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.