경고: 이 문서의 오래된 판을 편집하고 있습니다. 이것을 게시하면, 이 판 이후로 바뀐 모든 편집이 사라집니다. 귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!local getArgs = require('Module:Arguments').getArgs local ustring = mw.ustring local str = {} -- string.find function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ) local s = new_args['s'] or '' return ustring.len( s ) end -- string.sub function str.sub( frame ) local args = getArgs(frame) local new_args = str._getParameters( args, { 's', 'i', 'j' } ) local s = new_args['s'] or '' local i = tonumber( new_args['i'] ) or 1 local j = tonumber( new_args['j'] ) or -1 local len = ustring.len( s ) -- Convert negatives for range checking if i < 0 then i = len + i + 1 end if j < 0 then j = len + j + 1 end if i > len or j > len or i < 1 or j < 1 then return str._error( 'String subset index out of range' ) end if j < i then return str._error( 'String subset indices out of order' ) end return ustring.sub( s, i, j ) end -- 다른 모듈에서 require 되는 함수 function str._match( s, pattern, start, match_index, plain_flag, nomatch ) if s == '' then return str._error( 'Target string is empty' ) end if pattern == '' then return str._error( 'Pattern string is empty' ) end start = tonumber(start) or 1 if math.abs(start) < 1 or math.abs(start) > ustring.len( s ) then return str._error( 'Requested start is out of range' ) end if match_index == 0 then return str._error( 'Match index is out of range' ) end if plain_flag then pattern = str._escapePattern( pattern ) end local result if match_index == 1 then -- Find first match is simple case result = ustring.match( s, pattern, start ) else if start > 1 then s = ustring.sub( s, start ) end local iterator = ustring.gmatch(s, pattern) if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1 if match_index == 0 then result = w break end end else -- Reverse search local result_table = {} local count = 1 for w in iterator do result_table[count] = w count = count + 1 end result = result_table[ count + match_index ] end end if result == nil then if nomatch == nil then return str._error( 'Match not found' ) else return nomatch end else return result end end -- string.match function str.match( frame ) local args = getArgs(frame) local new_args = str._getParameters( args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) local s = new_args['s'] or '' local start = tonumber( new_args['start'] ) or 1 local plain_flag = str._getBoolean( new_args['plain'] or false ) local pattern = new_args['pattern'] or '' local match_index = math.floor( tonumber(new_args['match']) or 1 ) local nomatch = new_args['nomatch'] return str._match( s, pattern, start, match_index, plain_flag, nomatch ) end -- function str.pos( frame ) local args = getArgs(frame) local new_args = str._getParameters( args, {'target', 'pos'} ) local target_str = new_args['target'] or '' local pos = tonumber( new_args['pos'] ) or 0 if pos == 0 or math.abs(pos) > ustring.len( target_str ) then return str._error( 'String index out of range' ) end return ustring.sub( target_str, pos, pos ) end -- string.find function str.find( frame ) local args = getArgs(frame) local new_args = str._getParameters( args, {'source', 'target', 'start', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['target'] or '' local start_pos = tonumber(new_args['start']) or 1 local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return 0 end plain = str._getBoolean( plain ) local start = ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end -- string.gsub function str.gsub( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['pattern'] or '' local replace = new_args['replace'] or '' local count = tonumber( new_args['count'] ) local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return source_str end plain = str._getBoolean( plain ) if plain then pattern = str._escapePattern( pattern ) replace = ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. end local result if count ~= nil then if replace == '제거' or replace == nil then result = ustring.gsub( source_str, pattern, '', count) else result = ustring.gsub( source_str, pattern, replace, count ) end else if replace == '제거' or replace == nil then result = ustring.gsub( source_str, pattern, '') else result = ustring.gsub( source_str, pattern, replace ) end end return result end -- string.rep function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return ustring.rep( frame.args[1] or '', repetitions ) end -- string.upper function str.upper( frame ) local new_args = str._getParameters( frame.args, { 's' } ) local s = new_args['s'] or '' return ustring.upper( s ) end -- string.lower function str.lower( frame ) local new_args = str._getParameters( frame.args, { 's' } ) local s = new_args['s'] or '' return ustring.lower( s ) end function str.reverse( frame ) local new_args = str._getParameters( frame.args, { 's' } ) local s = new_args['s'] or '' local str = "" for token in ustring.gmatch(s, ".") do str = token..str end return str end -- string.byte의 유니코드 호환 버전 function str.tounicode( frame ) local args = getArgs(frame) local new_args = str._getParameters( args, { 's', 'i', 'j' } ) local s = new_args['s'] or '' local i = tonumber( new_args['i'] ) or 1 local j = tonumber( new_args['j'] ) or -1 return ustring.codepoint( frame.args[1], i, j ) end -- string.char function str.char( frame ) local args = getArgs(frame) local new_args = str._getParameters( args, { 'c' } ) local c = tonumber(new_args['c']) return ustring.char( c ) end function str.escapePattern( frame ) local args = getArgs(frame) local pattern_str = args[1] if not pattern_str then return str._error( 'No pattern string specified' ) end local result = str._escapePattern( pattern_str ) return result end function str.count(frame) local args_ = getArgs(frame) local args = str._getParameters(args_, {'source', 'pattern', 'plain'}) local source = args.source or '' local pattern = args.pattern or '' local plain = str._getBoolean(args.plain or true) if plain then pattern = str._escapePattern(pattern) end local _, count = ustring.gsub(source, pattern, '') return count end --[[ endswith This function determines whether a string ends with another string. ]] function str.endswith(frame) local args_ = getArgs(frame) local args = str._getParameters(args_, {'source', 'pattern'}) local source = args.source or '' local pattern = args.pattern or '' if pattern == '' then -- All strings end with the empty string. return "yes" end if ustring.sub(source, -ustring.len(pattern), -1) == pattern then return "yes" else return "" end end function str.join(frame) local args = frame.args local table_ = {} local sep = args[1] local i, j = 2, 1 -- args,table while args[i] ~= nil do table_[j] = args[i] i = i + 1 j = j + 1 end return table.concat(table_, sep) end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed 변수. This is relevant because named 변수 are not identical to unnamed 변수 due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] function str._getParameters( frame_args, arg_list ) local new_args = {} local index = 1 local value for _, arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index] index = index + 1 end new_args[arg] = value end return new_args end --[[ Helper function to handle error messages. ]] function str._error( error_str ) local frame = mw.getCurrentFrame() local error_category = frame.args.error_category or 'String 모듈에 의해 보고된 오류' local ignore_errors = frame.args.ignore_errors or false local no_category = frame.args.no_category or false if str._getBoolean(ignore_errors) then return '' end local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>' if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Category:' .. error_category .. ']]' .. error_str end return error_str end --[[ Helper Function to interpret boolean strings ]] function str._getBoolean( boolean_str ) local boolean_value if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower() if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false else boolean_value = true end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str else error( 'No boolean value found' ) end return boolean_value end --[[ Helper function that escapes all pattern characters so that they will be treated as plain text. ]] function str._escapePattern( pattern_str ) return ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ) end return str 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림) 이 문서에서 사용한 틀: 모듈:String/설명문서 (편집)