2015-02-02 4 views
1

Persons라는 반복 객체가있는 문자열을 구문 분석하고 있습니다. 그래서 ReFindNocase를 사용하여 첫 번째 코드를 얻은 다음 다른 코드를 얻기 위해 루프를 사용하고있었습니다. (각 사람의 위치와 다리가 필요합니다.) 그런 다음 RematchNocase를 발견했지만 위치가 아닌 문자열 만 반환합니다. 이 두 가지 조합이 있습니까? 예 : 각 일치에 대해 len 및 pos 구조체를 반환합니다.ColdFusion ReMatchNoCase

+1

기본적으로? 아니요. 그러나 롤 플레잉하기는 쉽습니다 (먼저 cflib.org를 살펴보십시오). 이 문제에 대해 투표를하는 것도 도움이 될 수 있습니다. https://bugbase.adobe.com/index.cfm?event=bug&id=3321666 –

+0

질문에 샘플 데이터를 제공 할 수 있다면 좋을 것입니다. –

+0

(지금부터 삭제 된 답변) * [ReFindNoCase]는 지금 당장 사용하고 있습니다. Refindnocase로 텍스트를 반복해야합니다 * 텍스트와 위치를 모두 제공하는 CF 함수가 없으므로 DIY (루프 + reFindNoCase, 정규식 등)해야합니다. – Leigh

답변

1

당신이 찾고있는 것을 찾았는지, 어떤 샘플 데이터가 없이는 이것만으로도 충분하다고 말할 수는 없지만, 이것이 도움이 될 수 있습니다.

<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 문자를 계속 반환합니다.