| 字符 | 含义 |
|---|---|
| \ | 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 |
| -或- | 对正则表达式功能字符的还原,如""匹配它前面元字符0次或多次,/a/将匹配a,aa,aaa,加了"\"后,/a*/将只匹配"a*"。 |
| ^ | 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" |
| $ | 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" |
| * | 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa |
| + | 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa |
| ? | 匹配前面元字符0次或1次,/ba*/将匹配b,ba |
| (x) | 匹配x保存x在名为$1...$9的变量中 |
| x|y | 匹配x或y |
| {n} | 精确匹配n次 |
| {n,} | 匹配n次以上 |
| {n,m} | 匹配n-m次 |
| [xyz] | 字符集(character set),匹配这个集合中的任一一个字符(或元字符) |
| [^xyz] | 不匹配这个集合中的任何一个字符 |
| [\b] | 匹配一个退格符 |
| \b | 匹配一个单词的边界 |
| \B | 匹配一个单词的非边界 |
| \cX | 这儿,X是一个控制符,/\cM/匹配Ctrl-M |
| \d | 匹配一个字数字符,/\d/ = /[0-9]/ |
| \D | 匹配一个非字数字符,/\D/ = /[^0-9]/ |
| \n | 匹配一个换行符 |
| \r | 匹配一个回车符 |
| \s | 匹配一个空白字符,包括\n,\r,\f,\t,\v等 |
| \S | 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ |
| \t | 匹配一个制表符 |
| \v | 匹配一个重直制表符 |
| \w | 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9] |
| \W | 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。 |
斜方向分割二维数组(lua简易实现)
分析规律(下图为11行-5列示例)
- 同颜色数字相差值为
列数-1- 可以产生
(行数+列数-1)组数字(如图是15)- 每组数字中,每一行最多只有一个(同行号应舍去)

function formatVal(val)
if val < 10 then return " " .. tostring(val) end
return tostring(val)
end
local cols = 5
local rows = 11
local t = {}
local gap = " "
for r = 1, rows do
local line = ""
for c = 1, cols do
local val = (r - 1) * cols + c
table.insert(t, val, val)
line = line .. " " .. formatVal(val)
end
print(line)
end
function SplitBySlash(t, cols, rows)
local arr2 = {}
local offset = cols - 1
for c = 1, rows + cols - 1 do
local arr = {}
for r = 1, rows do
local n = c + (r - 1) * offset
local fakeR = math.ceil(n / cols)
if fakeR == r then
table.insert(arr, n)
print(n, r, fakeR)
end
end
print("================")
table.insert(arr2, arr)
end
return arr2
end
local function __dump(var, level)
local rval = {}
table.insert(rval, "{")
for k, v in pairs(var) do
if type(v) == "table" and getmetatable(var) ~= v then
if k ~= "__base" then
table.insert(rval, string.format("%s%s=%s",
string.rep(" ", level), k,
__dump(v, level + 1)))
end
elseif type(v) ~= "function" then
table.insert(rval, string.format("%s%s=%s",
string.rep(" ", level), k,
tostring(v)))
end
end
table.insert(rval, string.format("%s}", string.rep(" ", level - 1)))
return table.concat(rval, "\n")
end
local function log(inst)
if inst == nil then
print(nil)
return
end
print(__dump(inst, 1))
end
local array2 = SplitBySlash(t, cols, rows)
log(array2)
最终效果

C# 使用LINQ比较两个数组的差异
string[] arrRate = new string[] { "a", "b", "c", "d" };//A
string[] arrTemp = new string[] { "c", "d", "e" };//B
string[] arrUpd = arrRate.Intersect(arrTemp).ToArray();//相同的数据 (结果:c,d)
string[] arrAdd = arrRate.Except(arrTemp).ToArray();//A中有B中没有的 (结果:a,b)
string[] arrNew = arrTemp.Except(arrRate).ToArray();//B中有A中没有的 (结果:e) 关于bash:在sed命令中转义正斜杠
- 如果replace内容不包含
/这种写法没问题sed"s/regex/replace/" file - 如果replace内容包含
/,则改变分割符号为|,完整写法为sed"s|regex|replace|" file,这样就不用为\写转义了
常用模拟器adb连接端口
::夜神安卓模拟器 62001
::逍遥安卓模拟器 21503
::蓝叠安卓模拟器 5555
::雷电安卓模拟器 5555
::天天安卓模拟器 5037
::网易MuMu模拟器 7555
::安卓模拟器大师 54001
::腾讯手游助手 5555
adb connect 127.0.0.1:62001
adb logcat -s Unity