<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AStr2</id>
	<title>Modul:Str2 - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AStr2"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Str2&amp;action=history"/>
	<updated>2026-05-20T19:15:08Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Str2&amp;diff=2921658&amp;oldid=prev</id>
		<title>imported&gt;Antonsusi am 2. April 2023 um 10:10 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Str2&amp;diff=2921658&amp;oldid=prev"/>
		<updated>2023-04-02T10:10:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Modul zum Test neuer Stringfunktionen, bevor sie ins Hauptmodul Str kommen.&lt;br /&gt;
-- trim: Entfernen aller Zeilenumbrüche, Austausch echter Tabulatoren durch Leerzeichen&lt;br /&gt;
-- anschließend Entfernung führender oder abschließender Leerzeichen.&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;\n&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;\t&amp;quot;,&amp;quot; &amp;quot;);&lt;br /&gt;
	while mw.ustring.sub(s,1,1) == &amp;quot; &amp;quot; do&lt;br /&gt;
		s= mw.ustring.sub(s,2,-1);&lt;br /&gt;
	end&lt;br /&gt;
	while mw.ustring.sub(s,-1,-1) == &amp;quot; &amp;quot; do&lt;br /&gt;
		s= mw.ustring.sub(s,1,-2);&lt;br /&gt;
	end&lt;br /&gt;
	return s;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function trimextended(s)&lt;br /&gt;
	local tbltags     = {&amp;quot;sup&amp;quot;,&amp;quot;sub&amp;quot;,&amp;quot;small&amp;quot;,&amp;quot;div&amp;quot;,&amp;quot;span&amp;quot;,&amp;quot;tt&amp;quot;,&amp;quot;code&amp;quot;};&lt;br /&gt;
	local pat=&amp;quot;&amp;quot;;&lt;br /&gt;
	-- entferne Zeilenumbrüche&lt;br /&gt;
	s = mw.ustring.gsub(s, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
	-- ersetze echten Tabulator durch ein Leerzeichen&lt;br /&gt;
	s = mw.ustring.gsub(s, &amp;quot;\t&amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
	-- entferne die wichtigsten Tags&lt;br /&gt;
	for i,v in ipairs(tbltags) do&lt;br /&gt;
		pat =&amp;quot;&amp;lt;&amp;quot; .. v ..&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
		s = mw.ustring.gsub(s,pat, &amp;quot;&amp;quot;);&lt;br /&gt;
		pat =&amp;quot;&amp;lt;/&amp;quot; .. v ..&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
		s = mw.ustring.gsub(s,pat, &amp;quot;&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	-- ersetze die wichtigsten Entities durch Zeichen&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;&amp;amp;nbsp;&amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;&amp;amp;gt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;&amp;amp;lt;&amp;quot;, &amp;quot;&amp;lt;&amp;quot;);&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;&amp;amp;quot;&amp;quot;, &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;&amp;amp;apos;&amp;quot;, &amp;quot;&amp;#039;&amp;quot;);&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;&amp;amp;thinsp;&amp;quot;, &amp;quot; &amp;quot;); -- hier notwendig&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;quot;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;&amp;quot;); -- muss am Ende stehen&lt;br /&gt;
	s = trim(s);&lt;br /&gt;
	return s;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function escape_lua_regex(str)&lt;br /&gt;
	return mw.ustring.gsub(str, &amp;quot;.&amp;quot;, {&lt;br /&gt;
		[&amp;quot;%&amp;quot;] = &amp;quot;%%&amp;quot;;&lt;br /&gt;
		[&amp;quot;^&amp;quot;] = &amp;quot;%^&amp;quot;;&lt;br /&gt;
		[&amp;quot;$&amp;quot;] = &amp;quot;%$&amp;quot;;&lt;br /&gt;
		[&amp;quot;.&amp;quot;] = &amp;quot;%.&amp;quot;;&lt;br /&gt;
		[&amp;quot;(&amp;quot;] = &amp;quot;%(&amp;quot;;&lt;br /&gt;
		[&amp;quot;)&amp;quot;] = &amp;quot;%)&amp;quot;;&lt;br /&gt;
		[&amp;quot;[&amp;quot;] = &amp;quot;%[&amp;quot;;&lt;br /&gt;
		[&amp;quot;]&amp;quot;] = &amp;quot;%]&amp;quot;;&lt;br /&gt;
		[&amp;quot;?&amp;quot;] = &amp;quot;%?&amp;quot;;&lt;br /&gt;
		[&amp;quot;*&amp;quot;] = &amp;quot;%*&amp;quot;;&lt;br /&gt;
		[&amp;quot;+&amp;quot;] = &amp;quot;%+&amp;quot;;&lt;br /&gt;
		[&amp;quot;-&amp;quot;] = &amp;quot;%-&amp;quot;;&lt;br /&gt;
		[&amp;quot;\0&amp;quot;] = &amp;quot;%z&amp;quot;;&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local Str = {};&lt;br /&gt;
&lt;br /&gt;
function Str.len(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	return mw.ustring.len(s);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.left(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local idx = tonumber(frame.args[2]) or 0;&lt;br /&gt;
	if idx &amp;lt; 1 then&lt;br /&gt;
		return &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(s,1,idx);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.reverse(frame)&lt;br /&gt;
	local args=frame:getParent().args;&lt;br /&gt;
	local s = trim((args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	return mw.ustring.reverse(s);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.lower(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	return mw.ustring.lower(s);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.upper(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	return mw.ustring.upper(s);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.right(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local length = tonumber(frame.args[2]) or 1;&lt;br /&gt;
	if length &amp;lt; 1 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		length = -length;&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(s,length,-1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.index(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local idx = tonumber(frame.args[2]) or 0;&lt;br /&gt;
	if idx &amp;lt; 1 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(s,idx,idx)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.sub(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local von = tonumber(frame.args[2]) or 1;&lt;br /&gt;
	local length = tonumber(frame.args[3]) or 0;&lt;br /&gt;
	if (von &amp;lt; 1) then&lt;br /&gt;
		von = 1;&lt;br /&gt;
	end&lt;br /&gt;
	local bis = von + length - 1;&lt;br /&gt;
	if (bis &amp;lt; von) then&lt;br /&gt;
		return &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(s,von,bis)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.crop(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local cut = tonumber(frame.args[2]) or 0;&lt;br /&gt;
	local length =  mw.ustring.len(s);&lt;br /&gt;
	if cut &amp;lt; 1 then&lt;br /&gt;
		return s;&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(s,1,length - cut);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.cropleft(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local cut = tonumber(frame.args[2]) or 0;&lt;br /&gt;
	local length =  mw.ustring.len(s);&lt;br /&gt;
	if cut &amp;lt; 1 then&lt;br /&gt;
		return s;&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(s,cut+1,-1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.find(frame)&lt;br /&gt;
	local text = trim((frame.args[1] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local pat = frame.args[2] or &amp;quot;&amp;quot;;&lt;br /&gt;
	if pat == &amp;quot;&amp;quot; then&lt;br /&gt;
		return 1;&lt;br /&gt;
	end&lt;br /&gt;
	local idx = mw.ustring.find(text,pat,1,true);&lt;br /&gt;
	if idx then&lt;br /&gt;
		return idx;&lt;br /&gt;
	else&lt;br /&gt;
		return -1;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.hex2dez(frame)&lt;br /&gt;
	a = tonumber(frame.args[1],16) or 0;&lt;br /&gt;
	return a;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.match(frame)&lt;br /&gt;
	local text = frame.args[1] or &amp;quot;&amp;quot;;&lt;br /&gt;
	local pattern = frame.args[2] or &amp;quot;&amp;quot;;&lt;br /&gt;
	local index = tonumber(frame.args[3]) or 0;&lt;br /&gt;
	if (text == &amp;quot;&amp;quot; or pattern == &amp;quot;&amp;quot;) then&lt;br /&gt;
		return &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
-- return all captures (denoted by brackets in the pattern) if index is zero, otherwise return only the index-th capture&lt;br /&gt;
	if index &amp;lt;= 0 then&lt;br /&gt;
		return mw.ustring.match(text, pattern);&lt;br /&gt;
	else&lt;br /&gt;
		return ({mw.ustring.match(text, pattern)})[index];&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.notless(frame)&lt;br /&gt;
	local s = frame.args[1] or &amp;quot;&amp;quot;;&lt;br /&gt;
	s = trimextended(s);&lt;br /&gt;
	local length =  mw.ustring.len(s);&lt;br /&gt;
	local pos = tonumber(frame.args[2]) or 0;&lt;br /&gt;
	local iftrue =  trim((frame.args[3] or &amp;quot;&amp;quot;));&lt;br /&gt;
	local iffalse =  trim((frame.args[4] or &amp;quot;&amp;quot;));&lt;br /&gt;
	if length &amp;gt;= pos then&lt;br /&gt;
		return iftrue;&lt;br /&gt;
	else&lt;br /&gt;
		return iffalse;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.replace(frame)	&lt;br /&gt;
	local text    = frame.args[1] or &amp;quot;&amp;quot;;      -- Text, der bearbeitet werden soll&lt;br /&gt;
	local search  = frame.args[2] or &amp;quot;&amp;quot;;    -- Textstellen innerhalb von &amp;quot;text&amp;quot; die ersetzt werden sollen&lt;br /&gt;
	local replace = frame.args[3] or &amp;quot;&amp;quot;;   -- Ersetzungstext&lt;br /&gt;
	if text == &amp;quot;&amp;quot; or search == &amp;quot;&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;quot;;&lt;br /&gt;
	end &lt;br /&gt;
	local count = tonumber(frame.args[4])-- Anzahl der Ersetzungen (optional)&lt;br /&gt;
	local regexsearch = frame.args[5] or &amp;quot;&amp;quot;;     -- beliebiger Wert um dafür zu sorgen, dass der Suchtext &amp;quot;search&amp;quot; als Lua-regulärer Ausdruck behandelt werden soll&lt;br /&gt;
&lt;br /&gt;
	if regexsearch == &amp;quot;&amp;quot; then&lt;br /&gt;
		search = escape_lua_regex(search);&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;
	if count then&lt;br /&gt;
		result,_ = mw.ustring.gsub(text, search, replace, count);&lt;br /&gt;
	else&lt;br /&gt;
		result,_ = mw.ustring.gsub(text, search, replace);&lt;br /&gt;
	end&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Str.minus(frame)&lt;br /&gt;
	local s = frame.args[1] or &amp;quot;&amp;quot;;&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;#039;−&amp;#039;,&amp;#039;-&amp;#039;); -- Erstes Zeichen ist U+2212&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;#039;‐&amp;#039;,&amp;#039;-&amp;#039;); -- Erstes Zeichen ist U+2010 (Viertelgeviertstrich)!&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;#039;‒&amp;#039;,&amp;#039;-&amp;#039;); -- Erstes Zeichen ist U+2012 (Figure dash)!&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;#039;–&amp;#039;,&amp;#039;-&amp;#039;); -- Erstes Zeichen ist U+2013 (Halbgeviertstrich)!&lt;br /&gt;
	s = mw.ustring.gsub(s,&amp;#039;—&amp;#039;,&amp;#039;-&amp;#039;); -- Erstes Zeichen ist U+2014 (Geviertstrich)!&lt;br /&gt;
	return s;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- für Vorlage Str ≥ len&lt;br /&gt;
function Str.greaterorequal(frame)&lt;br /&gt;
	local s = trim((frame.args[1] or &amp;quot;&amp;quot;));  -- Text, der geprüft werden soll&lt;br /&gt;
	local length =  mw.ustring.len(s);&lt;br /&gt;
	local limit = tonumber(frame.args[2] or &amp;quot;0&amp;quot;) or 0;&lt;br /&gt;
	local ge = frame.args[3] or &amp;quot;1&amp;quot;;&lt;br /&gt;
	local st = frame.args[4] or &amp;quot;&amp;quot;;&lt;br /&gt;
	if length &amp;lt; limit then&lt;br /&gt;
		return st;&lt;br /&gt;
	else&lt;br /&gt;
		return ge;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- richtet Zahlen numerisch aus&lt;br /&gt;
function Str.adjustnumber(frame)&lt;br /&gt;
	local ausgabe;&lt;br /&gt;
	local text  = frame.args[1] or &amp;quot;&amp;quot;      -- Text, der bearbeitet werden soll, i.d.R. eine Dezimalzahl&lt;br /&gt;
	local i_li = math.floor(tonumber(frame.args[2])) or 2;     -- maximale Stellen links vom Trennzeichen&lt;br /&gt;
	local i_re = math.floor(tonumber(frame.args[3])) or 2;    -- maximale Stellen rechts vom Trennzeichen&lt;br /&gt;
	local sign  = frame.args[&amp;#039;Z&amp;#039;] or &amp;quot;,&amp;quot;   -- Trennzeichen&lt;br /&gt;
	local zpos = 0;&lt;br /&gt;
	local len =  mw.ustring.len(text);&lt;br /&gt;
	if not text  or sign == &amp;quot;&amp;quot; then&lt;br /&gt;
		zpos = len + 1;&lt;br /&gt;
	else&lt;br /&gt;
		zpos = mw.ustring.find(text, sign,1, true) or len;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local zl = 0;&lt;br /&gt;
	local zr = 0;&lt;br /&gt;
	local t_li = &amp;quot;&amp;quot;;&lt;br /&gt;
	local t_re = &amp;quot;&amp;quot;;&lt;br /&gt;
	local z_li =&amp;quot;&amp;quot;;&lt;br /&gt;
	local z_re =&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if zpos &amp;gt; 1 then &lt;br /&gt;
		t_li = mw.ustring.sub(text,1, zpos-1);&lt;br /&gt;
	else&lt;br /&gt;
		t_li=&amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if len-zpos &amp;gt; 0 then &lt;br /&gt;
		t_re = mw.ustring.sub(text,zpos+1,-1);&lt;br /&gt;
	else&lt;br /&gt;
		t_re=&amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	zl = i_li -  mw.ustring.len(t_li);&lt;br /&gt;
	if zl &amp;lt; 1 then&lt;br /&gt;
		zl = 0;&lt;br /&gt;
		z_li = &amp;quot;&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
		while zl &amp;gt; 0 do&lt;br /&gt;
			zl = zl - 1;&lt;br /&gt;
			z_li = z_li .. &amp;quot;0&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		z_li = &amp;#039;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;&amp;#039; .. z_li .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	zr = i_re -  mw.ustring.len(t_re);&lt;br /&gt;
	if zr &amp;lt; 1 then&lt;br /&gt;
		zr = 0;&lt;br /&gt;
		z_re =&amp;quot;&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
		while zr &amp;gt; 0 do&lt;br /&gt;
			zr = zr - 1;&lt;br /&gt;
			z_re = z_re .. &amp;quot;0&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		z_re = &amp;#039;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;&amp;#039; .. z_re .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	ausgabe = z_li .. t_li  .. sign .. t_re .. z_re;&lt;br /&gt;
	return ausgabe;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- spaltet einen String auf und gibt ein Stück oder die Anzahl der Stücke zurück&lt;br /&gt;
function Str.split(frame)&lt;br /&gt;
	local ausgabe;&lt;br /&gt;
	local pos = math.floor(tonumber(frame.args[1])) or 0;     -- Wert, der das Ergebnis auswählt (&amp;lt;=0: Anzahl, sonst Stück)&lt;br /&gt;
	local text = frame.args[2] or &amp;quot;&amp;quot;;      -- Text, der gespalten werden soll&lt;br /&gt;
	local pattern = frame.args[3] or &amp;quot;&amp;quot;;   -- Muster, das die Stücke trennt&lt;br /&gt;
	local plain = frame.args[4];           -- bewirkt buchstäbliche Suche&lt;br /&gt;
	&lt;br /&gt;
	if plain then&lt;br /&gt;
		ausgabe = mw.text.split(text, pattern, plain)&lt;br /&gt;
	else&lt;br /&gt;
		ausgabe = mw.text.split(text, pattern)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if pos &amp;lt;= 0 then&lt;br /&gt;
		return #ausgabe;&lt;br /&gt;
	elseif pos &amp;lt;= #ausgabe then&lt;br /&gt;
		return ausgabe[pos];&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- spaltet einen String auf und gibt die Position eines Stücks oder eine Vorgabe zurück&lt;br /&gt;
function Str.splitpos(frame)&lt;br /&gt;
	local ausgabe;&lt;br /&gt;
	local part = frame.args[1] or &amp;quot;&amp;quot;      -- Stück, das gesucht werden soll&lt;br /&gt;
	local text = frame.args[2] or &amp;quot;&amp;quot;      -- Text, der gespalten werden soll&lt;br /&gt;
	local pattern = frame.args[3] or &amp;quot;&amp;quot;   -- Muster, das die Stücke trennt&lt;br /&gt;
	local plain = frame.args[4]           -- bewirkt buchstäbliche Suche&lt;br /&gt;
	local default = frame.args[&amp;#039;default&amp;#039;] or &amp;quot;&amp;quot;                       -- Vorgabe, die zurückgegeben werden kann&lt;br /&gt;
	local index = math.floor(tonumber(frame.args[&amp;#039;index&amp;#039;])) or 1;     -- Wert, der das entsprechende Vorkommen bestimmt&lt;br /&gt;
	&lt;br /&gt;
	if plain then&lt;br /&gt;
		ausgabe = mw.text.split(text, pattern, plain)&lt;br /&gt;
	else&lt;br /&gt;
		ausgabe = mw.text.split(text, pattern)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local i = 0;&lt;br /&gt;
	if index &amp;lt; 1 then&lt;br /&gt;
		index = 1;&lt;br /&gt;
	end&lt;br /&gt;
	while index &amp;gt; 0 and i &amp;lt; #ausgabe do&lt;br /&gt;
		i = i + 1;&lt;br /&gt;
		if ausgabe[i] == part then&lt;br /&gt;
			index = index - 1;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if index &amp;gt; 0 then&lt;br /&gt;
		return default;&lt;br /&gt;
	else&lt;br /&gt;
		return i;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Prüft einen String darauf, ob die ersten 10 Zeichen ein gültiges ISO-Datum ergeben.&lt;br /&gt;
-- Der Test prüft auf ASCII-String, weshalb die einfachen Stringfunktionen ausreichen&lt;br /&gt;
function Str.CheckIsoDate(frame)&lt;br /&gt;
	local text = frame.args[1] or &amp;quot;&amp;quot;;&lt;br /&gt;
	text = string.sub(text,1,10)&lt;br /&gt;
	if string.len(text) &amp;lt; 10 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local yyyy = tonumber(string.sub(text,1,4)) or &amp;quot;?&amp;quot;;&lt;br /&gt;
	local mm =  tonumber(string.sub(text,6,7)) or &amp;quot;?&amp;quot;;&lt;br /&gt;
	local dd =  tonumber(string.sub(text,9,10)) or &amp;quot;?&amp;quot;;&lt;br /&gt;
	if yyyy == &amp;quot;?&amp;quot; or mm == &amp;quot;?&amp;quot; or dd == &amp;quot;?&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if mm &amp;lt; 1 or mm &amp;gt; 12 or dd &amp;lt; 1 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if ((mm == 1 or mm==3 or mm==5 or mm==7 or mm==8 or mm==10 or mm==12) and dd &amp;gt; 31)&lt;br /&gt;
	  or ((mm == 4 or mm==6 or mm==9 or mm==11) and dd &amp;gt; 30 )&lt;br /&gt;
	  or (mm == 2 and  dd &amp;gt; 29) &lt;br /&gt;
	  or (mm == 2 and yyyy % 4 ~= 0 and dd &amp;gt; 28) then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	  end&lt;br /&gt;
	  if mm == 2 and yyyy &amp;gt; 1583&lt;br /&gt;
	    and (yyyy % 400 == 100 or yyyy % 400 == 200 or yyyy % 400 == 300) and dd &amp;gt; 28 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	  end&lt;br /&gt;
	return &amp;quot;1&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Str&lt;/div&gt;</summary>
		<author><name>imported&gt;Antonsusi</name></author>
	</entry>
</feed>