당신이 찾고있는 것을 찾았는지, 어떤 샘플 데이터가 없이는 이것만으로도 충분하다고 말할 수는 없지만, 이것이 도움이 될 수 있습니다.
<cfscript>
function ReFindAll(rex,str) {
if (not len(arguments.rex)) {
return {len = [], rex = [], matches = [], err = "Regular Expression Empty"};
}
local.Coords = {len = [], pos = [], matches = []};
local.finding = -1;
local.findset = "";
while (finding neq 0) {
findset = ReFindNoCase(arguments.rex,arguments.str,finding,true);
if (finding eq findset.pos[1] + findset.len[1]) {
return {len = [], rex = [], matches = [], err = "Regex has infinite matches."};
}
if (findset.len[1] gt 0) {
ArrayAppend(Coords.pos,findset.pos);
ArrayAppend(Coords.len,findset.len);
ArrayAppend(Coords.matches,mid(arguments.str,findset.pos[1],findset.len[1]));
}
finding = findset.pos[1] + findset.len[1];
}
return coords;
}
cogs = ReFindAll("name\d","name1 = bob name2 = joe name3 = steve");
writedump(cogs);
</cfscript>
그것은 몇 가지 유효성 검사 정규식 일부 콘텐츠, 어떤 내용이 있는지 확인하며 만약 더 그 자체로 .*?
0 문자를 캡처 한 것, 세이프 가드없이 (같은 지점에 루프에 무한합니다 정규 표현식에 대해 보호 서버 시간 초과 또는 오류가 발생할 때까지 0 문자를 계속 반환합니다.
기본적으로? 아니요. 그러나 롤 플레잉하기는 쉽습니다 (먼저 cflib.org를 살펴보십시오). 이 문제에 대해 투표를하는 것도 도움이 될 수 있습니다. https://bugbase.adobe.com/index.cfm?event=bug&id=3321666 –
질문에 샘플 데이터를 제공 할 수 있다면 좋을 것입니다. –
(지금부터 삭제 된 답변) * [ReFindNoCase]는 지금 당장 사용하고 있습니다. Refindnocase로 텍스트를 반복해야합니다 * 텍스트와 위치를 모두 제공하는 CF 함수가 없으므로 DIY (루프 + reFindNoCase, 정규식 등)해야합니다. – Leigh