>  기사  >  정규식을 배우는 초보자의 일반적인 실수

정규식을 배우는 초보자의 일반적인 실수

angryTom
angryTom앞으로
2019-11-09 17:42:563790검색

정규 규칙의 장점은 몇 시간만 공부하면 대부분의 규칙을 이해할 수 있지만 연습 과정에서 여전히 많은 문제에 직면하게 됩니다. 결과를 원한다면 정규 문법은 여전히 ​​조금 이상합니다. 이 기사에서는 정규 학습 과정에서 자주 저지르는 몇 가지 실수를 정리했습니다.

정규식을 배우는 초보자의 일반적인 실수

정규식

#. 🎜🎜#우리가 일반적으로 코드를 작성할 때 공백은 코드를 보다 표준화하기 위한 도구로 사용되는 경우가 많습니다. 줄 시작 부분에 적절한 들여쓰기와 탭을 함께 사용하면 코드가 더 명확해 보입니다. 하지만 정규 표현식에서는 주의해야 합니다. 공백 자체도 일치 대상 문자입니다. 공백을 부적절하게 사용하는 경우:

echo preg_match('/a{1, 3}/', "aaa") ? '匹配' : '不匹配';  // 不匹配

예를 들어 위의 정규 표현식은 1과 일치하도록 의도되었습니다. 그러나 실제로 다음 세 개의 a는 일치하지 않습니다. 왜냐하면 {1, 3} 중간에 추가 공백이 있어 메타 문자 "{}"의 원래 의미가 무효화되고 일반 문자가 되기 때문입니다. 문자:

echo preg_match('/a{1, 3}/', "a{1, 3}") ? '匹配' : '不匹配';  // 匹配
#🎜 🎜#문자열 "a{1, 3}"이 대신 일치하는데 이는 분명히 우리가 원하는 것이 아니므로 공백 문자 자체가 일치하지 않는 한 공백을 사용하지 않도록 주의해야 합니다.

echo preg_match('/a{1,3}/', "aaa") ? '匹配' : '不匹配';  // 匹配
# 🎜🎜#※ 예외적으로 패턴 수정자 x는 일반 문자열의 공백 문자를 무시할 수 있습니다. 그러나 위의 예에서와 같이 메타 문자의 공백은 여전히 ​​오류를 발생시킵니다. 일반적으로 이렇게 하면 정규식을 이해하기가 더 어려워지므로 사용하지 않는 것이 좋습니다.

echo preg_match('/a a a/x', "aaa") ? '匹配' : '不匹配';  // 匹配

2. 사례

#🎜🎜 #이것은 이해하기 쉽습니다. 기본적으로는 부주의한 실수입니다. 결국 우리가 일반적으로 사용하는 검색 도구는 대문자와 소문자를 자동으로 일치시키지 않는다는 사실을 때때로 잊어버립니다.

echo preg_match('/flag/', "Flag") ? '匹配' : '不匹配';  // 不匹配
Like 이렇게 하면 일치하는 문자열의 첫 글자가 대문자로 표시될 수 있어 당연히 일치하지 않게 됩니다. 이때 대문자와 소문자를 모두 고려해야 합니다. 하지만 때로는 특정 단어를 일치시키고 싶을 때도 있습니다. 이 네 글자가 함께 일치하는 한 다음과 같이 쓰는 것이 더 번거롭습니다.
echo preg_match('/[Ff][Ll][Aa][Gg]/', "Flag") ? '匹配' : '不匹配';  // 匹配

"와 같은 것이 있다고 상상하기는 어렵습니다. fLaG" 쓰는 방법이 좀 이상한데 이렇게 쓰지 않으면 모든 상황을 일치시킬 수는 없지만 경우에 따라서는 신경쓰지 않는 경우가 있는데 일치하는 문자열이 엄청 길어요. 이렇게 쓰면 지칠까봐 걱정되는데 다행히 “i "수식자:

echo preg_match('/flag/i', "Flag") ? '匹配' : '不匹配';  // 匹配

수식자 "i"를 설정하면 패턴에 대소문자가 일치하게 됩니다. 무감각하다.

3. 욕심 모드

수량자 "+"와 "*"는 기본적으로 욕심 모드입니다. 전에는 이것이 무엇을 의미하는지 이해하지 못할 수도 있습니다. 다음은 kano의 예입니다.

preg_match_all(&#39;/<span>.*<\/span>/&#39;, "<span>aaa</span><span>bbb</span>", $matches);
var_dump($matches);

#🎜🎜 #원본 정규식의 의도는 문자열에서 모든 범위 태그를 찾아서 배열에 넣는 것입니다. 그러나 결과는 매우 이상합니다. 두 범위가 동시에 일치했습니다! 사실, "aaabbb"라는 문자열은 실제로 로 시작하고 , 그러나 그 안의 .*는 너무 많은 내용과 일치합니다. "aaabbb"는 모두 일치합니다. 이것은 "+" 및 "*"의 욕심 모드입니다. 기본적으로 가능한 한 많은 문자와 일치하며 끝에 "?"를 추가하면 이 욕심 모드를 취소하여 가능한 한 적은 내용만 일치할 수 있습니다. #🎜🎜 #

preg_match_all(&#39;/<span>.*?<\/span>/&#39;, "<span>aaa</span><span>bbb</span>", $matches);
var_dump($matches);

정규식을 배우는 초보자의 일반적인 실수이번에는 원하는 결과를 얻었습니다.

일반 구문은 매우 특별하며, 주의하지 않으면 문제가 발생하기 쉽습니다.

추천 학습: "

정규식을 배우는 초보자의 일반적인 실수정규 표현식에 대한 빠른 소개

"

위 내용은 정규식을 배우는 초보자의 일반적인 실수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 www.kanoseo.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제