网站建设的一些原理,如何自己制作h5页面,跨境外贸人才网,wordpress连接直达☺ lua 和 javaScript 差不多的#xff0c;就是一些语法的细节不同#xff0c;学过js#xff0c;再注意一下下面的细节#xff0c;就能上手了~ 快速入门#xff0c;可以直接看一下菜鸟教程的lua#xff1a;https://www.runoob.com/lua/lua-tutorial.html Lua 和 Js 的不同… ☺ lua 和 javaScript 差不多的就是一些语法的细节不同学过js再注意一下下面的细节就能上手了~ 快速入门可以直接看一下菜鸟教程的luahttps://www.runoob.com/lua/lua-tutorial.html Lua 和 Js 的不同
Lua 概述
Lua概述
Lua是一种轻量小巧的脚本语言用标准C语言编写并以源代码形式开放 其设计目的是为了嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。
Lua特性
1.轻量级
使用标准C语言编写并以源代码形式开放编译后仅仅一百余K可以很方便的嵌入别的程序里。
2.可扩展
Lua提供了非常易于使用的扩展接口和机制由宿主语言(通常是C或C)提供这些功能Lua可以使用它们就像是本来就内置的功能一样。
3.其它特性
支持面向过程(procedure-oriented)编程和函数式编程(functional programming)
自动内存管理只提供了一种通用类型的表table用它可以实现数组哈希表集合对象、字典并且table是变长变量
语言内置模式匹配闭包(closure)函数也可以看做一个值提供多线程协同进程并非操作系统所支持的线程支持
通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制比如数据抽象虚函数继承和重载等 1、注释
(1) 单行注释:
--(2) 多行注释
--[[多行注释多行注释--]]2、变量
全局变量
默认情况下没有被local 修饰的变量都是全局变量不管它的位置在哪里访问一个没有初始化的全局变量也不会出错只不过得到的结果是nil如果你想删除一个全局变量只需要将变量赋值为nil。
局部变量[私有]
local 修饰
nil 空
字符串 字符串由一对双引号或单引号来表示 也可以用 2 个方括号 “[[]]” 来表示一块字符串
string1 this is string1
string2 this is string2html [[
html
head/head
bodya hrefhttp://www.runoob.com/菜鸟教程/a
/body
/html
]]
print(html) ☺ 字符串拼接使用的是 …
-- 举例子print(a .. b)
abprint(157 .. 428)
157428加号 这和java有区别会把字符串转成数学的加分运算 -- 举例子print(2 6)
8.0print(2 6)
8.0计算字符串长度使用# len www.runoob.comprint(#len)3、循环语句、判断语句
循环语句
(1) while
while(condition)
dostatements
end(2) for var 从 exp1 变化到 exp2每次变化以 exp3 为步长递增 var并执行一次 “执行体”。exp3 是可选的如果不指定默认为1。 for varexp1,exp2,exp3 do 执行体
end -- 举例子
tab1 { key1 val1, key2 val2, val3 }
for k, v in pairs(tab1) doprint(k .. - .. v)
end(3) repeate
repeatstatements
until( condition )判断语句
--[ 0 为 true ]
if(0)
thenprint(0 为 true)
end4、函数获取可变参数的长度也是使用#变量或者使用select方法
-- 举例子
function average(...)result 0local arg{...} -- arg 为一个表局部变量for i,v in ipairs(arg) doresult result vendprint(总共传入 .. #arg .. 个数)return result/#arg
endprint(平均值为,average(10,5,3,4,5,6))-----------------------------------
function average(...)result 0local arg{...}for i,v in ipairs(arg) doresult result vendprint(总共传入 .. select(#,...) .. 个数)return result/select(#,...)
endprint(平均值为,average(10,5,3,4,5,6))5、select 方法
select(‘#’, …) 返回可变参数的长度。select(n, …) 用于返回从起点 n 开始到结束位置的所有参数列表 如果这时候使用一个变量指向方法 select(n, …)它只会得到第 n 位置的参数值
function f(...)a select(3,...) --从第三个位置开始变量 a 对应右边变量列表的第一个参数print (a)print (select(3,...)) --打印所有列表参数
endf(0,1,2,3,4,5)
-- 结果
2
2 3 4 56、lua 的运算符 通用的加减乘除外还有整除 // 比如5//2 输出结果 2 不等于 ~ 逻辑运算符and、or、not 其他运算符 … 连接两个字符串 # 一元运算符返回字符串或表的长度 7、转义字符
所有的转义字符和所对应的意义
转义字符意义ASCII码值十进制\a响铃(BEL)007\b退格(BS) 将当前位置移到前一列008\f换页(FF)将当前位置移到下页开头012\n换行(LF) 将当前位置移到下一行开头010\r回车(CR) 将当前位置移到本行开头013\t水平制表(HT) 跳到下一个TAB位置009\v垂直制表(VT)011\代表一个反斜线字符’‘’092’代表一个单引号撇号字符039代表一个双引号字符034\0空字符(NULL)000\ddd1到3位八进制数所代表的任意字符三位八进制\xhh1到2位十六进制所代表的任意字符二位十六进制8、常用的字符串函数
Lua 提供了很多的方法来支持字符串的操作
序号方法 用途1string.upper(argument): 字符串全部转为大写字母。2string.lower(argument): 字符串全部转为小写字母。3**string.gsub(mainString,findString,replaceString,num)**在字符串中替换。mainString 为要操作的字符串 findString 为被替换的字符replaceString 要替换的字符num 替换次数可以忽略则全部替换如 string.gsub(aaaa,a,z,3); zzza 34string.find (str, substr, [init, [plain]]) 在一个指定的目标字符串 str 中搜索指定的内容 substr如果找到了一个匹配的子串就会返回这个子串的起始索引和结束索引不存在则返回 nil。init 指定了搜索的起始位置默认为 1可以一个负数表示从后往前数的字符个数。plain 表示是否使用简单模式默认为 falsetrue 只做简单的查找子串的操作false 表示使用使用正则模式匹配。以下实例查找字符串 “Lua” 的起始索引和结束索引位置 string.find(Hello Lua user, Lua, 1) 7 95string.reverse(arg) 字符串反转 string.reverse(Lua) auL6string.format(…) 返回一个类似printf的格式化字符串 string.format(the value is:%d,4) the value is:47string.char(arg) 和 string.byte(arg[,int]) char 将整型数字转成字符并连接 byte 转换字符为整数值(可以指定某个字符默认第一个字符)。 string.char(97,98,99,100) abcd string.byte(ABCD,4) 68 string.byte(ABCD) 65 8string.len(arg) 计算字符串长度。string.len(abc) 39string.rep(string, n) 返回字符串string的n个拷贝 string.rep(abcd,2) abcdabcd10… 链接两个字符串 print(www.runoob...com) www.runoob.com11string.gmatch(str, pattern) 返回一个迭代器函数每一次调用这个函数返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到迭代函数返回nil。 for word in string.gmatch(Hello Lua user, %a) do print(word) end Hello Lua user12string.match(str, pattern, init) string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。 在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。 string.match(I have 2 questions for you., %d %a) 2 questions string.format(%d, %q, string.match(I have 2 questions for you., (%d) (%a))) 2, questions字符串替换
**string.gsub(mainString,findString,replaceString,num)**在字符串中替换。
mainString 为要操作的字符串 findString 为被替换的字符replaceString 要替换的字符num 替换次数可以忽略则全部替换
string.gsub(aaaa,a,z,3)结果zzza 3
字符串反转
string.reverse(arg) 字符串反转
string.reverse(Lua) auL字符串长度
string.len(arg)
字符串拷贝
string.rep(string, n) 返回字符串string的n个拷贝 string.rep(abcd,2)
abcdabcd字符串拼接使用的是 … print(www.runoob...com)
www.runoob.com字符串截取
string.sub(s, i [, j]) 用于截取字符串原型为
参数说明
s要截取的字符串。i截取开始位置。j截取结束位置默认为 -1最后一个字符。
print(string.sub(abcdef, 1, 3))abc字符串查找
(1) string.find (str, substr, [init, [plain]])
在一个指定的目标字符串 str 中搜索指定的内容 substr如果找到了一个匹配的子串就会返回这个子串的起始索引和结束索引不存在则返回 nil。
init 指定了搜索的起始位置默认为 1可以一个负数表示从后往前数的字符个数。
plain 表示是否使用简单模式默认为 falsetrue 只做简单的查找子串的操作false 表示使用使用正则模式匹配。
以下实例查找字符串 “Lua” 的起始索引和结束索引位置 string.find(Hello Lua user, Lua, 1)
7 9(2) string.gmatch(str, pattern)
返回一个迭代器函数每一次调用这个函数返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到迭代函数返回nil。 for word in string.gmatch(Hello Lua user, %a) do print(word) end
Hello
Lua
user(3) string.match(str, pattern, init)
string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。 在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。 string.match(I have 2 questions for you., %d %a)
2 questions区别使用format 格式化一下 string.format(%d, %q, string.match(I have 2 questions for you., (%d) (%a)))
2, questions9、正则匹配规则
和java 不一样可以到时候使用lua 正则在线规则检查是否正确
字符 含义
%a 字母a-z,A-Z
%b %bxy,以x和y进行成对匹配
%c 控制字符ASCII码 十进制转义表示为\0 - \31
%d 数字 0 - 9
%f %f[char-set]边界匹配前一个不在范围内后一个在
%g 除了空格以外的可打印字符 十进制转义表示为\33 - \126
%l 小写字母 a - z
%u 大写字母 A - Z
%s 空格 十进制转义表示为\32
%p 标点符号即!#$%^*()~-_{}:?[];,./| 32个字符
%w 字母数字 a - z, A - Z, 0 - 9
%x 十六进制符号 0 - 9, a - f, A - F模糊匹配的其他匹配情况[单个字符(除 ^$()%.[]*±? 外): 与该字符自身配对]https://www.runoob.com/lua/lua-strings.html 10、字符串格式化
Lua 提供了 string.format() 函数以下是它的一些转义码
%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串11、字符与整数相互转换
string.byte(字符串) 转换第一个字符
string.char(数字) 转换为字符 12、Lua特性自动内存管理只提供了一种通用类型的表table用它可以实现数组哈希表集合对象、字典并且table是变长变量 table 变量注意事项: table 的索引不可以是数字也不可以是字符串会报错只能是普通变量。 tbl {100 100}
stdin:1: } expected near tbl {100 100}
stdin:1: } expected near -- 正确写法tbl {a aa}print(tbl[a])
aaprint(tbl.a)
aa(1) 数组
array {}for i -2, 2 doarray[i] i *2
endfor i -2,2 doprint(array[i])
end结果 -4 -2 0 2 4 (2) Lua 迭代器
☺ 泛型迭代
pairs 和 ipairs异同
同都能进行for 循环遍历
异ipairs 仅仅遍历值按照索引升序遍历索引中断停止遍历。即不能返回 nil,只能返回数字 0如果遇到 nil 则退出。所以table 变量中的变量是键值对形式的它会直接忽略即ipairs 迭代时会略过非数值的索引。
pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key并且除了迭代器本身以及遍历表本身还可以返回 nil。 注意下面两个例子的结果的顺序、特点 tab {Hello,World,a1,b2,z3,x10,y20,Good,Bye}
for k,v in pairs(tab) doprint(k.. ..v)
end结果
1 Hello 2 World 3 Good 4 Bye a 1 x 10 b 2 y 20 z 3
tab {Hello,World,a1,b2,z3,x10,y20,Good,Bye}
for k,v in ipairs(tab) doprint(k.. ..v)
end结果
1 Hello 2 World 3 Good 4 Bye 如上代码输出结果存在一定规律“Hello”、“World”、“Good”、Bye是表中的值在存储时是按照顺序存储的并且不同于其他脚本语言Lua是从1开始排序的因此使用pairs遍历打印输出时会先按照顺序输出表的值然后再按照键值对的键的哈希值打印。 ☺ 泛型迭代的例子2
for k, v in pairs(t) doprint(k, v)
end-------------------------------------------
array {Google, Runoob}for key,value in ipairs(array)
doprint(key, value)
end结果
1 Google 2 Runoob ☺ 泛型 for 在迭代的时候每次调用的是闭包函数迭代函数只是开始的时候调用一次
function eleiter(t)local index 0print(in eleiter function) -- 每次调用迭代函数都说一句in eleiter functionreturn function()print(I am here.) -- 每次调用闭包函数都说一句I am hereindex index 1return t[index]end
endt {one,two,three,four,five}
for ele in eleiter(t) doprint(ele)
end结果 in eleiter function -- 【for 迭代函数内部包含闭包函数的情况对于函数非闭包内容只执行一次】 – 泛型 for 在迭代的时候每次调用的是闭包函数 I am here. one I am here. two I am here. three I am here. four I am here. five I am here. (2) 表、字典、对象… 在lua使用 table 表示了数组、表、字典、对象 table 特点 Lua table 使用关联型数组你可以用任意类型的值来作数组的索引但这个值不能是 nil。 Lua table 是不固定大小的你可以根据自己需要进行扩容。 Lua 的table 变量是引用型变量即地址指向。 tab {Hello,World,a1,b2,z3,x10,y20,Good,Bye}
tab[1] W两个世界
for k,v in ipairs(tab) doprint(k.. ..v)
end结果
1 W两个世界 2 World 3 Good 4 Bye Lua 的table 变量是引用型变量即地址指向。 -- 简单的 table
mytable {}
print(mytable 的类型是 ,type(mytable))mytable[1] Lua
mytable[wow] 修改前
print(mytable 索引为 1 的元素是 , mytable[1])
print(mytable 索引为 wow 的元素是 , mytable[wow])-- alternatetable和mytable的是指同一个 table
alternatetable mytableprint(alternatetable 索引为 1 的元素是 , alternatetable[1])
print(mytable 索引为 wow 的元素是 , alternatetable[wow])alternatetable[wow] 修改后print(mytable 索引为 wow 的元素是 , mytable[wow])-- 释放变量
alternatetable nil
print(alternatetable 是 , alternatetable)-- mytable 仍然可以访问
print(mytable 索引为 wow 的元素是 , mytable[wow])mytable nil
print(mytable 是 , mytable)结果
mytable 的类型是 table mytable 索引为 1 的元素是 Lua mytable 索引为 wow 的元素是 修改前 alternatetable 索引为 1 的元素是 Lua mytable 索引为 wow 的元素是 修改前 mytable 索引为 wow 的元素是 修改后 alternatetable 是 nil mytable 索引为 wow 的元素是 修改后 mytable 是 nil (3) table 的增删改查操作
序号方法 用途1**table.concat (table [, sep [, start [, end]]])*concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。2**table.insert (table, [pos,] value)*在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.3**table.maxn (table)**指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)4**table.remove (table [, pos])**返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。5**table.sort (table [, comp])**对给定的table进行升序排序。13、协同程序 coroutine
(1) 基本语法
方法描述coroutine.create()创建 coroutine返回 coroutine 参数是一个函数当和 resume 配合使用的时候就唤醒函数调用coroutine.resume()重启 coroutine和 create 配合使用coroutine.yield()挂起 coroutine将 coroutine 设置为挂起状态这个和 resume 配合使用能有很多有用的效果coroutine.status()查看 coroutine 的状态 注coroutine 的状态有三种deadsuspendedrunning具体什么时候有这样的状态请参考下面的程序coroutine.wrap创建 coroutine返回一个函数一旦你调用这个函数就进入 coroutine和 create 功能重复coroutine.running()返回正在跑的 coroutine一个 coroutine 就是一个线程当使用running的时候就是返回一个 coroutine 的线程号当create一个coroutine的时候就是在新线程中注册了一个事件。 当使用resume触发事件的时候create的coroutine函数就被执行了当遇到yield的时候就代表挂起当前线程等候再次resume触发事件。 可以把 yield 当成暂时点击resume 当成开始并且具有“断点续传” 作用 -- 注册一个事件
co coroutine.create(function(i)print(coroutine.status(co)) -- 挂起/暂停coroutine.yield()print(i);end
)-- 执行事件
coroutine.resume(co, 1)
print(coroutine.status(co))
coroutine.resume(co, 3) -- 重新开始相当于“断点续传”因为这时候传递参数已经是3但在原先情况上继续执行会执行coroutine.resume(co, 1) 的参数1结果
running suspended
1 (2) coroutine.creat方法和coroutine.wrap 的区别
返回值不同coroutine.creat返回的是一个协同程序类型为thread,需要使用coroutine.resume进行调用而coroutine.wrap返回的是一个普通的方法(函数)类型为function和普通function有同样的使用方法并且不能使用coroutine.resume进行调用。
co_creat coroutine.create(function()print(co_creat类型是..type(co_creat))end
)co_wrap coroutine.wrap(function()print(co_wrap类型是..type(co_wrap))end
)coroutine.resume(co_creat)
co_wrap()结果
co_creat类型是thread co_wrap类型是function 14、创建对象
Lua 中使用:实现面向对象方式的调用。:只是语法糖它同时在方法的声明与实现中增加了一个名为 self 的隐藏参数这个参数就是对象本身。
- --实例
Account {balance 0};--生成对象
function Account:new(o)o o or {}; --如果用户没有提供对象则创建一个。setmetatable(o, self); --将 Account 作为新创建的对象元表self.__index self; --将新对象元表的 __index 指向为 Account这样新对象就可以通过索引来访问 Account 的值了return o; --将新对象返回
end--存款
function Account:deposit(v)self.balance self.balance v;
end--取款
function Account:withdraw(v)self.balance self.balance - v;
end--查询
function Account:demand()print(self.balance);
end--创建对象
myAccount Account:new();
--通过索引访问
print(myAccount.balance);
--调用函数
myAccount:deposit(100);
myAccount:withdraw(50);
myAccount:demand();结果 0 50 如果本文对你有帮助的话记得给一乐点个赞哦感谢 文章转载自: http://www.morning.lltdf.cn.gov.cn.lltdf.cn http://www.morning.zyrcf.cn.gov.cn.zyrcf.cn http://www.morning.qwbht.cn.gov.cn.qwbht.cn http://www.morning.fhwfk.cn.gov.cn.fhwfk.cn http://www.morning.clfct.cn.gov.cn.clfct.cn http://www.morning.rhlhk.cn.gov.cn.rhlhk.cn http://www.morning.hjwzpt.com.gov.cn.hjwzpt.com http://www.morning.rjrh.cn.gov.cn.rjrh.cn http://www.morning.stprd.cn.gov.cn.stprd.cn http://www.morning.prysb.cn.gov.cn.prysb.cn http://www.morning.fflnw.cn.gov.cn.fflnw.cn http://www.morning.gqwpl.cn.gov.cn.gqwpl.cn http://www.morning.trlhc.cn.gov.cn.trlhc.cn http://www.morning.lmzpk.cn.gov.cn.lmzpk.cn http://www.morning.zdgp.cn.gov.cn.zdgp.cn http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn http://www.morning.rnpt.cn.gov.cn.rnpt.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.jntdf.cn.gov.cn.jntdf.cn http://www.morning.mdplm.cn.gov.cn.mdplm.cn http://www.morning.caswellintl.com.gov.cn.caswellintl.com http://www.morning.qygfb.cn.gov.cn.qygfb.cn http://www.morning.hrzky.cn.gov.cn.hrzky.cn http://www.morning.rchsr.cn.gov.cn.rchsr.cn http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn http://www.morning.npmpn.cn.gov.cn.npmpn.cn http://www.morning.qbgff.cn.gov.cn.qbgff.cn http://www.morning.hyfrd.cn.gov.cn.hyfrd.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.gnhsg.cn.gov.cn.gnhsg.cn http://www.morning.3ox8hs.cn.gov.cn.3ox8hs.cn http://www.morning.bbgn.cn.gov.cn.bbgn.cn http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn http://www.morning.hfytgp.cn.gov.cn.hfytgp.cn http://www.morning.pqypt.cn.gov.cn.pqypt.cn http://www.morning.hrtfz.cn.gov.cn.hrtfz.cn http://www.morning.qbwyd.cn.gov.cn.qbwyd.cn http://www.morning.txqgd.cn.gov.cn.txqgd.cn http://www.morning.lgwpm.cn.gov.cn.lgwpm.cn http://www.morning.bsqkt.cn.gov.cn.bsqkt.cn http://www.morning.jqpq.cn.gov.cn.jqpq.cn http://www.morning.jgttx.cn.gov.cn.jgttx.cn http://www.morning.cknws.cn.gov.cn.cknws.cn http://www.morning.fhghy.cn.gov.cn.fhghy.cn http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.lfgql.cn.gov.cn.lfgql.cn http://www.morning.cprls.cn.gov.cn.cprls.cn http://www.morning.ykshx.cn.gov.cn.ykshx.cn http://www.morning.lffbz.cn.gov.cn.lffbz.cn http://www.morning.lynkz.cn.gov.cn.lynkz.cn http://www.morning.yfffg.cn.gov.cn.yfffg.cn http://www.morning.ndlww.cn.gov.cn.ndlww.cn http://www.morning.rtlg.cn.gov.cn.rtlg.cn http://www.morning.zkqjz.cn.gov.cn.zkqjz.cn http://www.morning.zycll.cn.gov.cn.zycll.cn http://www.morning.thlr.cn.gov.cn.thlr.cn http://www.morning.ywrt.cn.gov.cn.ywrt.cn http://www.morning.rnpnn.cn.gov.cn.rnpnn.cn http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn http://www.morning.rcwbc.cn.gov.cn.rcwbc.cn http://www.morning.nhlnh.cn.gov.cn.nhlnh.cn http://www.morning.stmkm.cn.gov.cn.stmkm.cn http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn http://www.morning.hongjp.com.gov.cn.hongjp.com http://www.morning.hmbxd.cn.gov.cn.hmbxd.cn http://www.morning.bgkk.cn.gov.cn.bgkk.cn http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn http://www.morning.ntnml.cn.gov.cn.ntnml.cn http://www.morning.mkxxk.cn.gov.cn.mkxxk.cn http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn http://www.morning.tpbhf.cn.gov.cn.tpbhf.cn http://www.morning.jljiangyan.com.gov.cn.jljiangyan.com http://www.morning.zxcny.cn.gov.cn.zxcny.cn http://www.morning.qqnjr.cn.gov.cn.qqnjr.cn http://www.morning.rsjng.cn.gov.cn.rsjng.cn http://www.morning.kbqqn.cn.gov.cn.kbqqn.cn http://www.morning.nlrp.cn.gov.cn.nlrp.cn