이 글은 주로 모든 문자의 PHP 정규 매칭 실패에 대한 이유와 해결 방법을 공유합니다. 이 글이 모든 사람에게 도움이 되기를 바랍니다.
<?php$str = ' @@@@i ( PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@ m ( PCRE_MULTILINE)';// 正则1:$preg = '/@@@@(.*)@@@@/'; 无法匹配换行符\n// 正则2:$preg = '/@@@@(.*)@@@@/s';// \s 匹配任意一个空白符,等价于[\f\n\r\t\v]// \S 匹配除空白符以外任何字符,等价于[^\f\n\r\t\v]preg_match_all( $preg, $str, $matches); print_r($matches);// 结果1:Array( [0] => Array() [1] => Array() )// 结果2:Array( [0] => Array ( [0] => @@@@i ( PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@ ) [1] => Array ( [0] => i ( PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。 ) )
i: 이 수정자를 설정하면 패턴의 문자가 대소문자를 구분하지 않고 일치합니다.
m: 기본적으로 PCRE는 대상 문자열이 단일 문자열로 구성되어 있다고 간주합니다. 한 줄의 문자(그러나 실제로는 여러 줄을 포함할 수 있음), "줄 시작" 메타 문자(^)는 문자열의 시작 부분에만 일치하고 "줄 끝" 메타 문자(
, 설정
s: 이 수정자가 설정되면 패턴의 점 메타 문자는 줄 바꿈을 포함한 모든 문자와 일치합니다. 이 수정자는 /와 일치하지 않습니다. Perl의 s 수정자. [^a]와 같은 부정 문자 클래스는 이 수정자의 설정과 관계없이 항상 개행 문자와 일치합니다.
x: 이것이 수정자로 설정된 경우 공백 데이터 문자는 이스케이프되거나 문자 클래스에 없는 문자는 항상 무시되며 # 문자와 이스케이프되지 않은 문자 클래스 외부의 다음 개행 문자 사이의 문자도 무시됩니다. 이 수정자는 Perl의 /x 수정자와 동일하므로 컴파일된 패턴에 다음이 포함될 수 있습니다. 참고: 이는 데이터 문자에만 적용됩니다. 공백 문자는 여전히 시퀀스(?()와 같은 특수 문자 시퀀스에 나타날 수 없습니다. 조건부 하위 그룹이 도입되었습니다. 구문을 사용하면 컴파일 오류가 발생합니다. 예를 들어 (?(는 오류를 발생시킵니다.).
e: 이 수정자가 설정되면 preg_replace()는 대체 문자열의 역참조 대체를 수행한 후 평가하고 대체된 문자열을 PHP 코드(평가 함수 메소드)로 실행하고 실행 결과를 실제로 대체에 참여하는 문자열로 사용합니다. 역참조 대체 중에 작은따옴표, 큰따옴표, 백슬래시() 및 NULL 문자가 백슬래시로 이스케이프됩니다.
Tip 请确保replacement参数由合法php代码字符串组成, 否则php将会 在preg_replace()调用的行上 产生一个解释错误. Note: 仅 preg_replace()使用此修饰符, 其他PCRE函数忽略此修饰符.
Note: 在非贪婪模式, 通常不能匹配超过 pcre.backtrack_limit的字符.
위 내용은 PHP의 모든 문자 정규 매칭이 실패하는 이유와 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!