이 코드의 행동에 대해 궁금 해서요 :string.find가 첫 번째 캡처가 아닌 전체 패턴의 인덱스를 반환하는 이유는 무엇입니까?
두 라인 모두를 찾고 있습니다, 그들은 참조의 동일한 프레임을 가지고 있기 때문에 반환, 다른 문자열, 그들은 동일한 인덱스를 반환하더라도str = "abcd"
print(str:find"a(bc)d") -- prints 1 4 bc
print(str:find"(ab)cd") -- prints 1 4 ab
. 즉, 인덱스를 계산할 때 캡처는 무시되지만 정상적으로 반환됩니다.
내 원래의 질문은 무엇이 잘못되었는지에 관한 것이었지만 그 다음에 나는 그걸 보았습니다. the manual actually indicates that this is proper behavior (매우 명확하지 않지만).
문제는 내가 마커의 위치를 반환하지 않고 근처의 마커를 기반으로 무언가를 찾으려고한다는 것이 었습니다. 나는 string.find
이 첫 번째 캡처의 위치를 반환 할 것으로 예상했는데, 그 중 하나가 있으면 괄호로 위치를 원했던 부분을 감쌌습니다. 분명히 그것은 도움이되지 않았습니다. 문제에 대한 다른 (더 나은) 해결책을 찾았지만 항상 가능하거나 편리하다고 생각하지 않습니다.
string.find
이 이런 식으로 행동하는 데는 어떤 이유가 있습니까? 사용자에게 특별한 이점이 있습니까? 루아를 절대적으로 숙달한다면 실제로 심각한 문제를 일으키는 경우는 없을까요?
빈 캡션을 사용하여 위치를 얻으십시오 :'print (str : match "a - (bc)() d") - 2 bc 4' –
'find '로 그렇게하면, 빈 캡처하지만 캡처로 반환되므로 이상한 동작을 변경하거나 설명하지 않습니다. – Wutaz
캡처를 얻으려면'match'를 사용하십시오. 인덱스와 캡쳐를 얻으려면'find'를 사용하십시오. 그것이 당신의 필요를 반영하지 않는다면 단순히'find'를 사용하지 마십시오. –