<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AString</id>
	<title>Module:String - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AString"/>
	<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=Module:String&amp;action=history"/>
	<updated>2026-07-18T00:54:09Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://test.zybkcn.com/w/index.php?title=Module:String&amp;diff=586&amp;oldid=prev</id>
		<title>WikiBot：​基于 zhwiki 版创建，提供 len/sub/match/find/replace/split/join 等函数</title>
		<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=Module:String&amp;diff=586&amp;oldid=prev"/>
		<updated>2026-06-20T16:33:33Z</updated>

		<summary type="html">&lt;p&gt;基于 zhwiki 版创建，提供 len/sub/match/find/replace/split/join 等函数&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
&lt;br /&gt;
This module is intended to provide access to basic string functions.&lt;br /&gt;
&lt;br /&gt;
Most of the functions provided here can be invoked with named parameters, &lt;br /&gt;
unnamed parameters, or a mixture.  If named parameters are used, Mediawiki will &lt;br /&gt;
automatically remove any leading or trailing whitespace from the parameter.  &lt;br /&gt;
Depending on the intended use, it may be advantageous to either preserve or&lt;br /&gt;
remove such whitespace.&lt;br /&gt;
&lt;br /&gt;
Global options&lt;br /&gt;
    ignore_errors: If set to &amp;#039;true&amp;#039; or 1, any error condition will result in &lt;br /&gt;
        an empty string being returned rather than an error message.  &lt;br /&gt;
        &lt;br /&gt;
    error_category: If an error occurs, specifies the name of a category to &lt;br /&gt;
        include with the error message.  The default category is  &lt;br /&gt;
        [Category:Errors reported by Module String].&lt;br /&gt;
        &lt;br /&gt;
    no_category: If set to &amp;#039;true&amp;#039; or 1, no category will be added if an error&lt;br /&gt;
        is generated.&lt;br /&gt;
        &lt;br /&gt;
Unit tests for this module are available at Module:String/tests.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local str = {}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
len&lt;br /&gt;
]]&lt;br /&gt;
function str.len( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&amp;#039;s&amp;#039;} );&lt;br /&gt;
    local s = new_args[&amp;#039;s&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    return mw.ustring.len( s )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
sub&lt;br /&gt;
]]&lt;br /&gt;
function str.sub( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, { &amp;#039;s&amp;#039;, &amp;#039;i&amp;#039;, &amp;#039;j&amp;#039; } );&lt;br /&gt;
    local s = new_args[&amp;#039;s&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local i = tonumber( new_args[&amp;#039;i&amp;#039;] ) or 1;&lt;br /&gt;
    local j = tonumber( new_args[&amp;#039;j&amp;#039;] ) or -1;&lt;br /&gt;
    &lt;br /&gt;
    local len = mw.ustring.len( s );&lt;br /&gt;
&lt;br /&gt;
    if i &amp;lt; 0 then&lt;br /&gt;
        i = len + i + 1;&lt;br /&gt;
    end&lt;br /&gt;
    if j &amp;lt; 0 then&lt;br /&gt;
        j = len + j + 1;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if i &amp;gt; len or j &amp;gt; len or i &amp;lt; 1 or j &amp;lt; 1 then&lt;br /&gt;
        return str._error( &amp;#039;截取字符串索引脱离区间&amp;#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if j &amp;lt; i then&lt;br /&gt;
        return str._error( &amp;#039;截取字符串指示脱离顺序&amp;#039; );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return mw.ustring.sub( s, i, j )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
sublength&lt;br /&gt;
]]&lt;br /&gt;
function str.sublength( frame )&lt;br /&gt;
    local i = tonumber( frame.args.i ) or 0&lt;br /&gt;
    local len = tonumber( frame.args.len )&lt;br /&gt;
    return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
match&lt;br /&gt;
]]&lt;br /&gt;
function str.match( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&amp;#039;s&amp;#039;, &amp;#039;pattern&amp;#039;, &amp;#039;start&amp;#039;, &amp;#039;match&amp;#039;, &amp;#039;plain&amp;#039;, &amp;#039;nomatch&amp;#039;} );&lt;br /&gt;
    local s = new_args[&amp;#039;s&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local start = tonumber( new_args[&amp;#039;start&amp;#039;] ) or 1;&lt;br /&gt;
    local plain_flag = str._getBoolean( new_args[&amp;#039;plain&amp;#039;] or false );&lt;br /&gt;
    local pattern = new_args[&amp;#039;pattern&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local match_index = math.floor( tonumber(new_args[&amp;#039;match&amp;#039;]) or 1 );&lt;br /&gt;
    local nomatch = new_args[&amp;#039;nomatch&amp;#039;];&lt;br /&gt;
    &lt;br /&gt;
    if s == &amp;#039;&amp;#039; then&lt;br /&gt;
        return str._error( &amp;#039;目标字符串是空的&amp;#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if pattern == &amp;#039;&amp;#039; then&lt;br /&gt;
        return str._error( &amp;#039;模式字符串是空的&amp;#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if math.abs(start) &amp;lt; 1 or math.abs(start) &amp;gt; mw.ustring.len( s ) then&lt;br /&gt;
        return str._error( &amp;#039;要求的起始点脱离区间&amp;#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if match_index == 0 then&lt;br /&gt;
        return str._error( &amp;#039;匹配索引脱离区间&amp;#039; );&lt;br /&gt;
    end&lt;br /&gt;
    if plain_flag then&lt;br /&gt;
        pattern = str._escapePattern( pattern );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local result&lt;br /&gt;
    if match_index == 1 then&lt;br /&gt;
        result = mw.ustring.match( s, pattern, start )&lt;br /&gt;
    else&lt;br /&gt;
        if start &amp;gt; 1 then&lt;br /&gt;
            s = mw.ustring.sub( s, start );&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local iterator = mw.ustring.gmatch(s, pattern);&lt;br /&gt;
        if match_index &amp;gt; 0 then&lt;br /&gt;
            for w in iterator do&lt;br /&gt;
                match_index = match_index - 1;&lt;br /&gt;
                if match_index == 0 then&lt;br /&gt;
                    result = w;&lt;br /&gt;
                    break;&lt;br /&gt;
                end&lt;br /&gt;
            end    &lt;br /&gt;
        else&lt;br /&gt;
            local result_table = {};&lt;br /&gt;
            local count = 1;&lt;br /&gt;
            for w in iterator do&lt;br /&gt;
                result_table[count] = w;&lt;br /&gt;
                count = count + 1;&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            result = result_table[ count + match_index ];            &lt;br /&gt;
        end&lt;br /&gt;
    end        &lt;br /&gt;
    &lt;br /&gt;
    if result == nil then&lt;br /&gt;
        if nomatch == nil then&lt;br /&gt;
            return str._error( &amp;#039;找不到匹配&amp;#039; );&lt;br /&gt;
        else&lt;br /&gt;
            return nomatch;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return result;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
pos&lt;br /&gt;
]]&lt;br /&gt;
function str.pos( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&amp;#039;target&amp;#039;, &amp;#039;pos&amp;#039;} );&lt;br /&gt;
    local target_str = new_args[&amp;#039;target&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local pos = tonumber( new_args[&amp;#039;pos&amp;#039;] ) or 0;&lt;br /&gt;
&lt;br /&gt;
    if pos == 0 or math.abs(pos) &amp;gt; mw.ustring.len( target_str ) then&lt;br /&gt;
        return str._error( &amp;#039;字符串索引脱离区间&amp;#039; );&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    return mw.ustring.sub( target_str, pos, pos );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
str_find&lt;br /&gt;
]]&lt;br /&gt;
function str.str_find( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&amp;#039;source&amp;#039;, &amp;#039;target&amp;#039;} );&lt;br /&gt;
    local source_str = new_args[&amp;#039;source&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local target_str = new_args[&amp;#039;target&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    if target_str == &amp;#039;&amp;#039; then&lt;br /&gt;
        return 1;&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    local start = mw.ustring.find( source_str, target_str, 1, true )&lt;br /&gt;
    if start == nil then&lt;br /&gt;
        start = -1&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
find&lt;br /&gt;
]]&lt;br /&gt;
function str.find( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&amp;#039;source&amp;#039;, &amp;#039;target&amp;#039;, &amp;#039;start&amp;#039;, &amp;#039;plain&amp;#039; } ); &lt;br /&gt;
    local source_str = new_args[&amp;#039;source&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local pattern = new_args[&amp;#039;target&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local start_pos = tonumber(new_args[&amp;#039;start&amp;#039;]) or 1;&lt;br /&gt;
    local plain = new_args[&amp;#039;plain&amp;#039;] or true;&lt;br /&gt;
        &lt;br /&gt;
    if source_str == &amp;#039;&amp;#039; or pattern == &amp;#039;&amp;#039; then&lt;br /&gt;
        return 0;&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    plain = str._getBoolean( plain );&lt;br /&gt;
&lt;br /&gt;
    local start = mw.ustring.find( source_str, pattern, start_pos, plain )&lt;br /&gt;
    if start == nil then&lt;br /&gt;
        start = 0&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
replace&lt;br /&gt;
]]&lt;br /&gt;
function str.replace( frame )&lt;br /&gt;
    local new_args = str._getParameters( frame.args, {&amp;#039;source&amp;#039;, &amp;#039;pattern&amp;#039;, &amp;#039;replace&amp;#039;, &amp;#039;count&amp;#039;, &amp;#039;plain&amp;#039; } ); &lt;br /&gt;
    local source_str = new_args[&amp;#039;source&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local pattern = new_args[&amp;#039;pattern&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local replace = new_args[&amp;#039;replace&amp;#039;] or &amp;#039;&amp;#039;;&lt;br /&gt;
    local count = tonumber( new_args[&amp;#039;count&amp;#039;] );&lt;br /&gt;
    local plain = new_args[&amp;#039;plain&amp;#039;] or true;&lt;br /&gt;
        &lt;br /&gt;
    if source_str == &amp;#039;&amp;#039; or pattern == &amp;#039;&amp;#039; then&lt;br /&gt;
        return source_str;&lt;br /&gt;
    end    &lt;br /&gt;
    plain = str._getBoolean( plain );&lt;br /&gt;
&lt;br /&gt;
    if plain then&lt;br /&gt;
        pattern = str._escapePattern( pattern );&lt;br /&gt;
        replace = mw.ustring.gsub( replace, &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot; );&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local result;&lt;br /&gt;
&lt;br /&gt;
    if count ~= nil then&lt;br /&gt;
        result = mw.ustring.gsub( source_str, pattern, replace, count );&lt;br /&gt;
    else&lt;br /&gt;
        result = mw.ustring.gsub( source_str, pattern, replace );&lt;br /&gt;
    end        &lt;br /&gt;
&lt;br /&gt;
    return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
rep&lt;br /&gt;
]]&lt;br /&gt;
function str.rep( frame )&lt;br /&gt;
    local repetitions = tonumber( frame.args[2] )&lt;br /&gt;
    if not repetitions then &lt;br /&gt;
        return str._error( &amp;#039;function rep expects a number as second parameter, received &amp;quot;&amp;#039; .. ( frame.args[2] or &amp;#039;&amp;#039; ) .. &amp;#039;&amp;quot;&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
    return string.rep( frame.args[1] or &amp;#039;&amp;#039;, repetitions )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
split&lt;br /&gt;
]]&lt;br /&gt;
function str.split(inputstr, sep, no_pattern, ignore_null)&lt;br /&gt;
	if type(inputstr) == type({table}) then&lt;br /&gt;
		if not getArgs then getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs end&lt;br /&gt;
		args = getArgs(inputstr, {parentFirst=true})&lt;br /&gt;
		for arg_name, arg_value in pairs( args ) do&lt;br /&gt;
			if arg_name == 1 or arg_name == &amp;#039;1&amp;#039; or arg_name == &amp;quot;str&amp;quot; or arg_name == &amp;quot;inputstr&amp;quot; or arg_name == &amp;quot;input&amp;quot; then&lt;br /&gt;
				input_str = arg_value&lt;br /&gt;
			elseif arg_name == 2 or arg_name == &amp;#039;2&amp;#039; or arg_name == &amp;quot;sep&amp;quot; or arg_name == &amp;quot;separator&amp;quot; then&lt;br /&gt;
				separ = arg_value&lt;br /&gt;
			elseif arg_name == 3 or arg_name == &amp;#039;3&amp;#039; or arg_name == &amp;quot;no_pattern&amp;quot; or arg_name == &amp;quot;no pattern&amp;quot; then&lt;br /&gt;
				no_pattern_flag = arg_value&lt;br /&gt;
			elseif arg_name == 4 or arg_name == &amp;#039;4&amp;#039; or arg_name == &amp;quot;ignore_null&amp;quot; or arg_name == &amp;quot;ignore null&amp;quot; then&lt;br /&gt;
				ignore_null_flag = arg_value&lt;br /&gt;
			elseif arg_name == 5 or arg_name == &amp;#039;5&amp;#039; or arg_name == &amp;quot;format&amp;quot; then&lt;br /&gt;
				format = arg_value or &amp;quot;*{{{1}}}\n&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not yesno then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
		no_pattern_flag = yesno( no_pattern_flag or &amp;#039;yes&amp;#039; )&lt;br /&gt;
		ignore_null_flag = yesno( ignore_null_flag or &amp;#039;no&amp;#039; )&lt;br /&gt;
		is_invoke = true&lt;br /&gt;
		format = mw.ustring.gsub(format or &amp;quot;*{{{1}}}\n&amp;quot;, &amp;quot;%{%{%{.-%}%}%}&amp;quot;, &amp;quot;%%s&amp;quot; );&lt;br /&gt;
		it = mw.ustring.find(format, &amp;quot;%%s&amp;quot;, 1)&lt;br /&gt;
		if it == nil then format = format .. &amp;quot;%s&amp;quot; end&lt;br /&gt;
		format = mw.ustring.gsub(format, &amp;quot;\\n&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		input_str = inputstr&lt;br /&gt;
		separ = sep&lt;br /&gt;
		no_pattern_flag = no_pattern&lt;br /&gt;
		ignore_null_flag = ignore_null&lt;br /&gt;
		is_invoke = false&lt;br /&gt;
	end&lt;br /&gt;
	input_str = input_str or &amp;#039;&amp;#039; &lt;br /&gt;
	separ = separ or &amp;quot;%s&amp;quot;&lt;br /&gt;
	if no_pattern_flag == nil then no_pattern_flag = true end&lt;br /&gt;
	if ignore_null_flag == nil then ignore_null_flag = false end&lt;br /&gt;
&lt;br /&gt;
	length = mw.ustring.len(input_str)&lt;br /&gt;
	if no_pattern_flag then&lt;br /&gt;
		separ = mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(separ, &lt;br /&gt;
			&amp;quot;%[&amp;quot;, &amp;quot;%[&amp;quot;), &amp;quot;%]&amp;quot;, &amp;quot;%]&amp;quot;), &amp;quot;%{&amp;quot;, &amp;quot;%{&amp;quot;), &amp;quot;%}&amp;quot;, &amp;quot;%}&amp;quot;), &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot;), &amp;quot;%)&amp;quot;, &amp;quot;%)&amp;quot;), &amp;quot;%-&amp;quot;, &amp;quot;%-&amp;quot;),&lt;br /&gt;
			&amp;quot;%^&amp;quot;, &amp;quot;%^&amp;quot;), &amp;quot;%$&amp;quot;, &amp;quot;%$&amp;quot;), &amp;quot;%(&amp;quot;, &amp;quot;%(&amp;quot;), &amp;quot;%.&amp;quot;, &amp;quot;%.&amp;quot;), &amp;quot;%*&amp;quot;, &amp;quot;%*&amp;quot;), &amp;quot;%+&amp;quot;, &amp;quot;%+&amp;quot;), &amp;quot;%|&amp;quot;, &amp;quot;%|&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	iterator = 1 ; i = 1 ; flag = true&lt;br /&gt;
	result = {}&lt;br /&gt;
	separ_str_begin, separ_str_end = mw.ustring.find(input_str, separ, iterator)&lt;br /&gt;
	debug1 = 1&lt;br /&gt;
	while flag do&lt;br /&gt;
		debug1 = debug1 + 1&lt;br /&gt;
		if separ_str_begin == nil or iterator &amp;gt; length or debug1 &amp;gt;= 100 then&lt;br /&gt;
			separ_str_begin = 0&lt;br /&gt;
			separ_str_end = -2&lt;br /&gt;
			flag = false&lt;br /&gt;
		end&lt;br /&gt;
		if separ_str_end &amp;lt; separ_str_begin then separ_str_end = separ_str_begin end&lt;br /&gt;
		finded_str = mw.ustring.sub(input_str, iterator, separ_str_begin - 1)&lt;br /&gt;
		if not(mw.text.trim(finded_str) == &amp;#039;&amp;#039; and ignore_null_flag) then&lt;br /&gt;
			result[i] = finded_str&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		iterator = separ_str_end + 1&lt;br /&gt;
		separ_str_begin, separ_str_end = mw.ustring.find(input_str, separ, iterator)&lt;br /&gt;
	end&lt;br /&gt;
	if is_invoke then&lt;br /&gt;
		body = &amp;#039;&amp;#039;&lt;br /&gt;
		for i, result_str in pairs( result ) do&lt;br /&gt;
			body = body .. mw.ustring.gsub(format, &amp;quot;%%s&amp;quot;, result_str)&lt;br /&gt;
		end&lt;br /&gt;
		return body&lt;br /&gt;
	end&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
join&lt;br /&gt;
]]&lt;br /&gt;
function str.join(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local sep&lt;br /&gt;
	for _, v in ipairs( frame.args ) do&lt;br /&gt;
		if sep then&lt;br /&gt;
			if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				table.insert(args, v)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			sep = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( args, sep or &amp;#039;&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper functions&lt;br /&gt;
&lt;br /&gt;
function str._getParameters( frame_args, arg_list )&lt;br /&gt;
    local new_args = {};&lt;br /&gt;
    local index = 1;&lt;br /&gt;
    local value;&lt;br /&gt;
    &lt;br /&gt;
    for i,arg in ipairs( arg_list ) do&lt;br /&gt;
        value = frame_args[arg]&lt;br /&gt;
        if value == nil then&lt;br /&gt;
            value = frame_args[index];&lt;br /&gt;
            index = index + 1;&lt;br /&gt;
        end&lt;br /&gt;
        new_args[arg] = value;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return new_args;&lt;br /&gt;
end        &lt;br /&gt;
&lt;br /&gt;
function str._error( error_str )&lt;br /&gt;
    local frame = mw.getCurrentFrame();&lt;br /&gt;
    local error_category = frame.args.error_category or &amp;#039;字符串模块报告的错误&amp;#039;;&lt;br /&gt;
    local ignore_errors = frame.args.ignore_errors or false;&lt;br /&gt;
    local no_category = frame.args.no_category or false;&lt;br /&gt;
    &lt;br /&gt;
    if str._getBoolean(ignore_errors) then&lt;br /&gt;
        return &amp;#039;&amp;#039;;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local error_str = &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;字符串模块出错：&amp;#039; .. error_str .. &amp;#039;&amp;lt;/strong&amp;gt;&amp;#039;;&lt;br /&gt;
    if error_category ~= &amp;#039;&amp;#039; and not str._getBoolean( no_category ) then&lt;br /&gt;
        error_str = &amp;#039;[[Category:&amp;#039; .. error_category .. &amp;#039;]]&amp;#039; .. error_str;&lt;br /&gt;
    end        &lt;br /&gt;
    &lt;br /&gt;
    return error_str;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function str._getBoolean( boolean_str )&lt;br /&gt;
    local boolean_value;&lt;br /&gt;
    &lt;br /&gt;
    if type( boolean_str ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
        boolean_str = boolean_str:lower();&lt;br /&gt;
        if boolean_str == &amp;#039;false&amp;#039; or boolean_str == &amp;#039;no&amp;#039; or boolean_str == &amp;#039;0&amp;#039; &lt;br /&gt;
                or boolean_str == &amp;#039;&amp;#039; then&lt;br /&gt;
            boolean_value = false;&lt;br /&gt;
        else&lt;br /&gt;
            boolean_value = true;&lt;br /&gt;
        end    &lt;br /&gt;
    elseif type( boolean_str ) == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
        boolean_value = boolean_str;&lt;br /&gt;
    else&lt;br /&gt;
        error( &amp;#039;布尔值找不到&amp;#039; );&lt;br /&gt;
    end    &lt;br /&gt;
    return boolean_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function str._escapePattern( pattern_str )&lt;br /&gt;
    return mw.ustring.gsub( pattern_str, &amp;quot;([%(%)%.%%%+%-%*%?%[%^%$%]])&amp;quot;, &amp;quot;%%%1&amp;quot; );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return str&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
</feed>