내 preg_match_all 문에 문제가 있습니다. 기사를 타이핑 할 때 완벽하게 작동하지만 일정 시간이 지난 후에 갑자기 모든 것이 함께 작동하지 않습니다. 이것은 많은 기능을 수행 한 후에 무엇이든지의 기능을 가진 알려진 문제입니까?preg_match_all이 너무 많은 문자 뒤에 나오는 이유는 무엇입니까?
$number = preg_match_all("/(<!-- ([\w]+):start -->)\n?(.*?)\n?(<!-- \\2:stop -->)/s", $data, $matches, PREG_SET_ORDER);
는 그 기사에 대한 작업 중지, 모든 시간을 잘 작동하고 다른 페이지에 대한 잘 작동하지만 그 기사 일단 특정 길이를 통과, 휙 됐어요. 더 긴 텍스트 블록에서 사용할 수있는 또 다른 솔루션이 있습니까? 처리중인 기사의 길이는 약 33,000 자 (공백 포함)입니다.
나는 이와 같은 질문을하기 전에 내가 실제로 테스트 한 적이없는 단 하나의 대답만을 얻었다. 이전에는 특정 시나리오에 대해 다른 방법으로 주위를 둘러 보았지만 이번에는 한 번에 하나의 기사이기 때문에이 방법을 사용할 수 없습니다. pcre.backtrack_limit
및 pcre.recursion_limit
을 최대 500,000까지 변경해 보았습니다. 아무런 효과가 없었습니다. 왜 이런 일이 벌어지고 있으며,이 거대한 텍스트 블록에서도 작업을 계속하기 위해 내가 할 수있는 일이 무엇인지에 대한 다른 아이디어가 있습니까? 30,000 자 제한은 약간 낮은 것으로 보이는데, 이는 5,000-6,000 자 (약 5,700 자)입니다. 두 개의 분리 된 텍스트 블록에있는 경우 시작 및 중지를 찾을 수 없으므로 별개로 분리 할 수 있습니다.
"작동이 중지되면"정확히 무엇이 발생합니까? 오류가 반환됩니까? 조용한 실패와 일치 하는가? 100 % CPU를 씹으십시오. (나는 PCRE의 매칭 알고리즘의 기하 급수적 인 최악의 경우 동작을 유발하는 정규 표현식을 작성했을지 모르지만 자세한 내용은 알 수 없다.) – zwol
아무 것도하지 않고 단지 0, 오류 또는 아무것도 반환하지 않는다. . – animuson
'preg_last_error()'를 확인 했습니까? 내가 그랬다는 것을 기억하지 못한다. – mvds