, 내가 정규식 엔진 내부의 모습을 촬영이 솔루션
$detail = '[code]<!doctype>
<html>
<head></head>
<body><p>My Regex script</p></body>
</html>[/code]';
function regex($detail)
{
if(preg_match('#^\[code](?=.*(<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\2>))\[/code]#si', $detail))
{
return true;
}
return false;
}
echo regex($detail);
함께했다,이 일어나고있는 것입니다. 위의 $ detail에 ^\[q](?=.*(<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\2>))[/q]*
을 적용 할 때; \[q]
은 [q]
과 일치하고 코드의 html 섹션은 (<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\2>))
과 일치합니다.
lookahead와의 일치가 취소되므로 엔진이 문자열의 [/ q]에서 코드의 html 섹션으로 되돌아갑니다. Lookahead가 성공적 이었으므로 엔진은 [/q]
으로 계속됩니다. 그러나 [/q]
은 (<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\2>))
과 일치 할 수 없습니다. 따라서이 일치 시도는 실패합니다. 작동 synthax
그러나이 정규식 :
#^\[code](?=.*(<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\2>\[/code]))#si
정규식 엔진은 단순히 말한다 : "개방 모든 문자, 마지막에 적어도 닫는 [/code]
태그 HTML 태그의 다음 한 쌍의 다음 [code]
태그".
이 내용이 유스 케이스 패턴 일치 (종료)에 대해 설명하는 데 도움이되기를 바랍니다.