문제 :
귀하의 패턴 [%a ][%w ]+
는 적어도 하나의 문자 나 숫자 또는 공백 문자 또는 공간을 의미한다. 이상형 (
가
function expandVars(tmpl,t)
return string.gsub(tmpl, '%$([%a ][%w ]+)', t)
end
local sentence = expandVars(
"$a1 $b and c $d e f ",
{["a1 "]="(match is 'a1 ')", ["b and c "]="(match is 'b and c ')", ["d e f "]="(match is 'd e f ')", }
)
이
(매치는 'A1'임) 인쇄 : 정규식 욕심 때문에, 가능한 한 큰 순서와 일치하도록 시도하며, 경기는 공간을 포함) 'B와 C'(경기는 'DEF')
솔루션입니다 : 테이블에서 키와 일치해야합니다
변수 이름; 당신은 공백과 모든 종류의 문자가있는 키를 받아 들일 수 있습니다. 그러나 사용자가 위와 같이 테이블 키에 []
을 사용하도록 강요합니다.
영숫자와 밑줄을 잘 유지하고, 숫자로 시작할 수 없다는 제약 조건이 있습니다. 이것은 당신이 숫자의 (포함 없음) (*
보다는 +
)의 수에 따라 편지 (%a
)를 원하고 [%w_]
강조 일반적으로 의미
이
function expandVars(tmpl,t)
return string.gsub(tmpl, '%$(%a[%w_]*)', t)
end
local sentence = expandVars(
"$a $b1 and c $d_2 e f ",
{a="(match is 'a')", b1="(match is 'b1')", d_2="(match is 'd_2')", }
)
print(sentence)
이 인쇄
(match는 'a') (match는 'b1')이고 c (match는 'd_2') ef; 일치하지 않는 항목 : $ _a $ 1a b
선행 밑줄과 선행 숫자가 어떻게 받아 들여지지 않았는지 보여줍니다.
변수 이름에 공백이 허용됩니까? 그렇지 않다면,'% $ (% a % w *)'를 시도하십시오. –
아, 네! 그것은 효과가 있었다. 그러나 [% a] [% w]와 % a % w의 차이점은 무엇입니까? 제발? –
'[% w]는 영숫자 ** 또는 공백 **을 의미합니다. –