模块:Find country
![文档图示](http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/50px-Test_Template_Info-Icon_-_Version_%282%29.svg.png)
您可能想要创建本Scribunto模块的文档。 编者可以在本模块的沙盒 (创建 | 镜像)和测试样例 (编辑)页面进行实验。 请在/doc子页面中添加分类。本模块的子页面。 |
--[[ v1.00
Test the string against the list of countries/continents.
Return the first word which matches a country/continent name ...
unless the "match=" parameter specifies a different match.
If there is no match, then return an empty string ... unless
the "nomatch" parameter specifies something different
]]
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- config
local nomatch = ""
local matchnum = 1
local countryList = {
'南非',
'中非共和國',
'中非共和国',
'阿富汗',
'阿爾巴尼亞',
'阿尔巴尼亚',
'阿爾及利亞',
'阿尔及利亚',
'美屬薩摩亞',
'美属萨摩亚',
'安道爾',
'安道尔',
'安哥拉',
'安吉拉',
'安圭拉',
'安地卡及巴布達',
'安提瓜和巴布達',
'安提瓜和巴布达',
'阿根廷',
'亞美尼亞',
'亚美尼亚',
'阿魯巴',
'阿鲁巴',
'澳洲',
'澳大利亞',
'澳大利亚',
'奧地利',
'奥地利',
'亞塞拜然',
'阿塞拜疆',
'巴哈馬',
'巴哈马',
'巴林',
'孟加拉',
'孟加拉国',
'巴貝多',
'巴巴多斯',
'白俄羅斯',
'白俄罗斯',
'比利時',
'比利时',
'貝里斯',
'伯利兹',
'貝南',
'貝寧',
'贝宁',
'百慕達',
'百慕大',
'不丹',
'玻利維亞',
'玻利维亚',
'波士尼亞與赫塞哥維納',
'波斯尼亚和黑塞哥维那',
'波斯尼亞和黑塞哥維那',
'波札那',
'博茨瓦納',
'博茨瓦纳',
'巴西',
'汶萊',
'汶莱',
'保加利亞',
'保加利亚',
'布吉納法索',
'布基納法索',
'布基纳法索',
'蒲隆地',
'布隆迪',
'柬埔寨',
'喀麥隆',
'喀麦隆',
'喀麥隆',
'加拿大',
'維德角',
'佛得角',
'開曼群島',
'开曼群岛',
'查德',
'乍得',
'智利',
"中國",
"中国",
'中國大陸',
'中国大陆',
'中華人民共和國',
'中华人民共和国',
'哥倫比亞',
'哥伦比亚',
'葛摩',
'科摩羅',
'科摩罗',
'剛果共和國',
'刚果共和国',
'剛果民主共和國',
'刚果民主共和国',
'剛果',
'刚果',
'庫克群島',
'库克群岛',
'哥斯大黎加',
'哥斯達黎加',
'哥斯达黎加',
'克羅埃西亞',
'克羅地亞',
'克罗地亚',
'古巴',
'古拉索',
'庫拉索',
'库拉索',
'賽普勒斯',
'塞浦路斯',
'捷克斯洛伐克',
'捷克',
'丹麥',
'丹麦',
'吉布地',
'吉布提',
'多明尼加',
'多米尼加',
'多米尼克',
'東帝汶',
'东帝汶',
'厄瓜多',
'厄瓜多爾',
'厄瓜多尔',
'埃及',
'薩爾瓦多',
'萨尔瓦多',
'英格蘭',
'英格兰',
'厄利垂亞',
'厄立特里亞',
'厄立特里亚',
'愛沙尼亞',
'爱沙尼亚',
'史瓦帝尼',
'斯威士蘭',
'斯威士兰',
'衣索比亞',
'埃塞俄比亞',
'埃塞俄比亚',
'福克蘭群島',
'福克兰群岛',
'法羅群島',
'法罗群岛',
'斐濟',
'斐济',
'芬蘭',
'芬兰',
'法國',
'法国',
'加彭',
'加蓬',
'甘比亞',
'岡比亞',
'冈比亚',
'喬治亞',
'格魯吉亞',
'格鲁吉亚',
'德國',
'德国',
'迦納',
'加納',
'加纳',
'直布羅陀',
'直布罗陀',
'大不列顛島',
'大不列颠岛',
'希臘',
'希腊',
'格瑞那達',
'格林納達',
'格林纳达',
'關島',
'关岛',
'瓜地馬拉',
'危地馬拉',
'危地马拉',
'巴布亞紐幾內亞',
'巴布亞新畿內亞',
'巴布亚新几内亚',
'赤道幾內亞',
'赤道几内亚',
'幾內亞比索',
'畿內亞比紹',
'几内亚比绍',
'幾內亞',
'畿內亞',
'几内亚',
'蓋亞那',
'圭亞那',
'圭亚那',
'海地',
'宏都拉斯',
'洪都拉斯',
'宏都拉斯',
'香港',
'匈牙利',
'冰島',
'冰岛',
'印度',
'印尼',
'印度尼西亞',
'印度尼西亚',
'伊朗',
'伊拉克',
'北愛爾蘭',
'北爱尔兰',
'愛爾蘭',
'爱尔兰',
'以色列',
'義大利',
'意大利',
'象牙海岸',
'科特迪瓦',
"牙買加",
'牙买加',
'日本',
'約旦',
'约旦',
'哈薩克',
'哈萨克斯坦',
'肯亞',
'肯雅',
'肯尼亚',
'吉里巴斯',
'基里巴斯',
'科索沃',
'科威特',
'吉爾吉斯',
'吉尔吉斯斯坦',
"寮國",
'老撾',
'老挝',
'拉脫維亞',
'拉脱维亚',
'黎巴嫩',
'賴索托',
'萊索托',
'莱索托',
'賴比瑞亞',
'利比里亞',
'利比里亚',
'利比亞',
'利比亚',
'列支敦斯登',
'列支敦士登',
'立陶宛',
'盧森堡',
'卢森堡',
'澳門',
'澳门',
'北馬其頓',
'北马其顿',
'馬其頓',
'马其顿',
'馬達加斯加',
'马达加斯加',
'馬拉威',
'馬拉維',
'马拉维',
'馬來西亞',
'马来西亚',
'馬爾地夫',
'馬爾代夫',
'马尔代夫',
'馬利',
'馬里',
'马里',
'馬爾他',
'馬耳他',
'马耳他',
'馬紹爾群島',
'马绍尔群岛',
'茅利塔尼亞',
'毛里塔尼亞',
'毛里塔尼亚',
'模里西斯',
'毛里裘斯',
'毛里求斯',
'墨西哥',
'密克羅尼西亞聯邦',
'密克罗尼西亚联邦',
'密克羅尼西亞',
'密克罗尼西亚',
'摩爾多瓦',
'摩尔多瓦',
'摩納哥',
'摩纳哥',
'蒙古國',
'蒙古国',
'蒙特內哥羅',
'黑山',
'蒙哲臘',
'蒙特塞拉特',
'摩洛哥',
'莫三比克',
'莫桑比克',
'緬甸',
'缅甸',
'納米比亞',
'纳米比亚',
'諾魯',
'瑙魯',
'瑙鲁',
'尼泊爾',
'尼泊尔',
'荷蘭',
'荷兰',
'新喀里多尼亞',
'新喀里多尼亚',
'紐西蘭',
'新西兰',
'尼加拉瓜',
'奈及利亞',
'尼日爾',
'尼日尔',
'尼日利亞',
'尼日利亚',
'尼日',
'北韓',
'北韩',
"朝鮮民主主義人民共和國",
"朝鲜民主主义人民共和国",
'挪威',
'阿曼',
'巴基斯坦',
'帛琉',
'帕勞',
'帕劳',
'巴勒斯坦',
'巴拿馬',
'巴拿马',
'巴拉圭',
'秘魯',
'秘鲁',
'菲律賓',
'菲律宾',
'波蘭',
'波兰',
'葡萄牙',
'波多黎各',
'西屬維京群島',
'西属维尔京群岛',
'卡達',
'卡塔爾',
'卡塔尔',
'羅馬尼亞',
'罗马尼亚',
'俄羅斯',
'俄罗斯',
'蘇聯',
'苏联',
'盧安達',
'盧旺達',
'卢旺达',
'聖克里斯多福及尼維斯',
'聖基茨和尼維斯',
'圣基茨和尼维斯',
'聖露西亞',
'聖盧西亞',
'圣卢西亚',
'聖文森及格瑞那丁',
'聖文森特和格林納丁斯',
'圣文森特和格林纳丁斯',
'薩摩亞',
'萨摩亚',
'聖馬利諾',
'聖馬力諾',
'圣马力诺',
'聖多美普林西比',
'聖多美和普林西比',
'圣多美和普林西比',
'沙烏地阿拉伯',
'沙地阿拉伯',
'沙特阿拉伯',
'蘇格蘭',
'苏格兰',
'塞内加尔',
'塞內加爾',
'塞爾維亞',
'塞尔维亚',
'塞席爾',
'塞舌爾',
'塞舌尔',
'獅子山',
'塞拉利昂',
'新加坡',
'斯洛伐克',
'斯洛維尼亞',
'斯洛文尼亞',
'斯洛文尼亚',
'索羅門群島',
'所羅門群島',
'所罗门群岛',
'索馬利亞',
'索馬里',
'索马里',
'大韓民國',
'大韩民国',
'韓國',
'韩国',
'南韓',
'南韩',
'南蘇丹',
'南苏丹',
'蘇丹',
'苏丹',
'西班牙',
'斯里蘭卡',
'斯里兰卡',
'蘇利南',
'蘇里南',
'苏里南',
'瑞典',
'瑞士',
'敘利亞',
'叙利亚',
'大溪地',
'塔希提',
'中華民國',
'中华民国',
'台灣',
'臺灣',
'台湾',
'塔吉克',
'塔吉克斯坦',
'坦尚尼亞',
'坦桑尼亞',
'坦桑尼亚',
'泰國',
'泰国',
'多哥',
'東加',
'湯加',
'汤加',
'千里達及托巴哥',
'千里達及多巴哥',
'特立尼达和多巴哥',
'千里達島',
'特立尼达岛',
'托巴哥島',
'多巴哥島',
'多巴哥岛',
'突尼西亞',
'突尼斯',
'土耳其',
'土庫曼',
'土库曼斯坦',
'土克凱可群島',
'特克斯和凱科斯群島',
'特克斯和凯科斯群岛',
'吐瓦魯',
'圖瓦盧',
'图瓦卢',
'烏干達',
'乌干达',
'烏克蘭',
'乌克兰',
'阿拉伯聯合大公國',
'阿拉伯聯合酋長國',
'阿拉伯联合酋长国',
'英國',
'英国',
'美國',
'美国',
'烏拉圭',
'乌拉圭',
'烏茲別克',
'乌兹别克斯坦',
'萬那杜',
'瓦努阿圖',
'瓦努阿图',
'委內瑞拉',
'越南',
'英屬維爾京群島',
'英屬處女群島',
'英属维尔京群岛',
'美屬維爾京群島',
'美屬處女群島',
'美属维尔京群岛',
'維爾京群島',
'處女群島',
'维尔京群岛',
'威爾斯',
'威尔士',
'葉門',
'也門',
'也门',
'尚比亞',
'贊比亞',
'赞比亚',
'辛巴威',
'津巴布韋',
'津巴布韦',
'Find country/testcases'
}
-- returns the name of a country that is found in the string
-- ... or an empty string if there is no match
function findcountryinstring(str)
nMatches = 0
myMatches ={}
str=" " .. str:gsub("^%s*(.-)%s*$", "%1") .. " "
-- check agaist each country
-- if there is a match, then return that country
for i, thiscountry in ipairs(countryList) do
if mw.ustring.find(str, thiscountry) then
nMatches = nMatches + 1
myMatches[nMatches] = thiscountry
end
end
if (nMatches == 0) then
-- none of the title words matches a whole country
return nomatch
end
if ((matchnum >= 1) and (matchnum <= nMatches)) then
return myMatches[matchnum]
end
if (matchnum < 0) then
matchnum = matchnum + 1 -- so that -1 is the last match etc
if ((matchnum + nMatches) >= 1) then
return myMatches[matchnum + nMatches]
end
end
-- if we get here, we have not found a match at the position specified by "matchnum"
return nomatch
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
if (args['nomatch'] ~= nil) then
nomatch = args['nomatch']
end
-- by default, we return the first match
-- but the optional "C" paarmeter sets the "matchnum" variable, which
-- * for a positive matchnum "n", returns the nth match if it exists
-- * for a positive matchnum "n", returns (if it exists) the nth match
-- counting backwards from the end.
-- So "match=-1" returns the last match
-- and "match=-3" returns the 3rd-last match
if (args['match'] ~= nil) then
matchnum = tonumber(args['match'])
if ((matchnum == nil) or (matchnum == 0)) then
matchnum = 1
end
end
-- by default, we use the current page
-- but if the "string=" parameters is supplied, we use that
-- so we try the parameter first
thispagename = nil
if ((args['string'] ~= nil) and (args['string'] ~= "")) then
-- we have a non-empty "string" parameter, so we use it
thisstring = args['string']
else
-- get the page title
thispage = mw.title.getCurrentTitle()
thisstring = thispage.text;
end
-- now check the pagename to try to find a country
result = findcountryinstring(thisstring)
if (result == "") then
return nomatch
end
return result
end
return p