정규 규칙의 장점은 몇 시간만 공부하면 대부분의 규칙을 이해할 수 있지만 연습 과정에서 여전히 많은 문제에 직면하게 됩니다. 결과를 원한다면 정규 문법은 여전히 조금 이상합니다. 이 기사에서는 정규 학습 과정에서 자주 저지르는 몇 가지 실수를 정리했습니다.
정규식
#. 🎜🎜#우리가 일반적으로 코드를 작성할 때 공백은 코드를 보다 표준화하기 위한 도구로 사용되는 경우가 많습니다. 줄 시작 부분에 적절한 들여쓰기와 탭을 함께 사용하면 코드가 더 명확해 보입니다. 하지만 정규 표현식에서는 주의해야 합니다. 공백 자체도 일치 대상 문자입니다. 공백을 부적절하게 사용하는 경우:
echo preg_match('/a{1, 3}/', "aaa") ? '匹配' : '不匹配'; // 不匹配
예를 들어 위의 정규 표현식은 1과 일치하도록 의도되었습니다. 그러나 실제로 다음 세 개의 a는 일치하지 않습니다. 왜냐하면 {1, 3} 중간에 추가 공백이 있어 메타 문자 "{}"의 원래 의미가 무효화되고 일반 문자가 되기 때문입니다. 문자:
echo preg_match('/a{1, 3}/', "a{1, 3}") ? '匹配' : '不匹配'; // 匹配
echo preg_match('/a{1,3}/', "aaa") ? '匹配' : '不匹配'; // 匹配
echo preg_match('/a a a/x', "aaa") ? '匹配' : '不匹配'; // 匹配
echo preg_match('/flag/', "Flag") ? '匹配' : '不匹配'; // 不匹配
echo preg_match('/[Ff][Ll][Aa][Gg]/', "Flag") ? '匹配' : '不匹配'; // 匹配
echo preg_match('/flag/i', "Flag") ? '匹配' : '不匹配'; // 匹配
3. 욕심 모드
수량자 "+"와 "*"는 기본적으로 욕심 모드입니다. 전에는 이것이 무엇을 의미하는지 이해하지 못할 수도 있습니다. 다음은 kano의 예입니다.preg_match_all('/<span>.*<\/span>/', "<span>aaa</span><span>bbb</span>", $matches); var_dump($matches);
#🎜🎜 #원본 정규식의 의도는 문자열에서 모든 범위 태그를 찾아서 배열에 넣는 것입니다. 그러나 결과는 매우 이상합니다. 두 범위가 동시에 일치했습니다! 사실, "aaabbb"라는 문자열은 실제로 로 시작하고 , 그러나 그 안의 .*는 너무 많은 내용과 일치합니다. "aaabbb"는 모두 일치합니다. 이것은 "+" 및 "*"의 욕심 모드입니다. 기본적으로 가능한 한 많은 문자와 일치하며 끝에 "?"를 추가하면 이 욕심 모드를 취소하여 가능한 한 적은 내용만 일치할 수 있습니다. #🎜🎜 # 이번에는 원하는 결과를 얻었습니다. 정규 표현식에 대한 빠른 소개 " 위 내용은 정규식을 배우는 초보자의 일반적인 실수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!preg_match_all('/<span>.*?<\/span>/', "<span>aaa</span><span>bbb</span>", $matches);
var_dump($matches);