什么是正则表达式?

  • 正则表达式是一种文本模式,包括普通字符(例如a到z之间的字母)和特殊符号(称为“元字符”)。

  • 正则表达式使用单个字符串来描述、匹配一系列匹配某个语法规则的字符串。

  • 正则表达式是繁琐的,但它是强大的,学会之后的应用会让你提高效率。

限定符

  • *:匹配的字符可以不出现,也可以出现一次或多次(大于等于0)

  • +:匹配的字符至少出现一次(大于等于1)

  • ?:匹配的字符最多只可以出现一次(0或1)

  • {n}:代表匹配n次

  • {n,}:代表至少匹配n次,最多无限

  • {n,m}:代表至少匹配n次,最多匹配m次

定界符

  • ^:匹配输入字符串的开始位置

  • $:匹配输入字符串的结束位置

  • \b:匹配一个单词边界,即单词与空格之间的位置(光标所在的位置)

  • \B:非单词边界匹配

修饰符

跟在定界符//的后面:

  • g:匹配出所有符合要求的结果,例:/\d+/g 匹配字符串中所有数字组合

  • s:使正则表达式中的(.)可以匹配到换行符

  • i:忽略大小写配匹配,例:/[a-z]/gi  匹配所有字母忽略大小写

  • m:进行多行匹配,必须配合定位符^和$使用,例:

    str="1233asfasfasf\nasdas13232\n54346waqadsafaf\n9999asdasda"
    str.match(/^\d+/gm)//匹配每行以数字开头的内容
    结果:
    ["1233", "54346", "9999"]

元字符

字符

描述

(pattern)

匹配 pattern 并获取这一匹配。这是一个获取匹配。

(?:pattern)

匹配 pattern 但不获取匹配结果,这是一个非获取匹配,不进行存储供以后使用,但是消耗字符匹配。

(?=pattern)

正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,不需要获取供以后使用。

(?!pattern)

正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,不需要获取供以后使用。

(?<=pattern)

反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。

(?<!pattern)

反向否定预查,与正向否定预查类似,只是方向相反。

x|y

匹配 x 或 y。

[xyz]

字符集合。匹配所包含的任意一个字符。

[^xyz]

负值字符集合。匹配未包含的任意字符。

[a-z]

字符范围。匹配指定范围内的任意字符。

[^a-z]

负值字符范围。匹配任何不在指定范围内的任意字符。

\d

匹配一个数字字符。等价于 [0-9]。

\D

匹配一个非数字字符。等价于 [^0-9]。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S

匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\f

匹配一个换页符。等价于 \x0c 和 \cL。

\n

匹配一个换行符。等价于 \x0a 和 \cJ。

\r

匹配一个回车符。等价于 \x0d 和 \cM。

\t

匹配一个制表符。等价于 \x09 和 \cI。

\v

匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w

匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。

\W

匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。

\cx

匹配由 x 指明的控制字符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

获取匹配和非获取匹配区别?

在使用正则表达式的时候,我们经常会使用()把某个部分括起来,称为一个子模式。

获取匹配:是指系统会在幕后将所有的子模式匹配结果保存起来,供我们查找或者替换。

非获取匹配:是指系统不会保存子模式的匹配结果,子模式的匹配更多的只是作为一种限制条件使用,如正向预查(?=)、反向预查(?<=)、负正向预查(?!)、负反向预查(?<!

正向预查(?=)、反向预查(?<=)、负正向预查(?!)、负反向预查(?<!)

正向预查:

一般放在整个正则表达式的后面。

正向预查的意思是,子模式仅仅作为允许出现的条件限制,并不作为匹配结果输出。

//内容:
Windows 95 and Windows 98 are the successor.
Then Windows 2000 and Windows Xp appeared.
Windows Vista is the Latest version of the family.
//正则表达式
/Windows(?= [\d]+\b)/g
//匹配结果:
Windows
Windows
Windows
//以上三个Windows分别指的是Windows 95、Windows 98、Windows 2000中的Windows。

负正向预查:

一般放在整个正则表达式的后面。

负正向预查意思是,子模式仅仅作为不允许出现的条件限制,并不作为匹配结果输出。

//内容:
Windows 95 and Windows 98 are the successor.
Then Windows 2000 and Windows Xp appeared.
Windows Vista is the Latest version of the family.
//正则表达式
/Windows(?! [\d]+\b)/g
//匹配结果:
Windows
Windows
//以上两个Windows分别指的是Windows Xp、Windows Vista中的Windows。

反向预查:

一般放在整个正则表达式的前面。

反向预查与正向预查很相似,子模式仅仅作为允许出现的条件限制,不作为结果输出。

不同的是,正向预查匹配子模式前面的结果作为匹配结果,而反向预查匹配子模式后面的结果作为匹配结果。

//内容
CNY:100.2
USD:222.1
USD:301.3
HKD:122.1
CNY:114.4
//正则表达式
/(?<=CNY:)\d+\.\d/g
//匹配结果:
100.2
114.4

负反向预查:

一般放在整个正则表达式的前面。

负反向预查与反向预查很相似,子模式仅仅作为不允许出现的条件限制,不作为结果输出。

不同的是,负正向预查匹配子模式前面的结果作为匹配结果,而负反向预查匹配子模式后面的结果作为匹配结果。

//内容
CNY:100.2
USD:222.1
USD:301.3
HKD:122.1
CNY:114.4
//正则表达式
/(?<!CNY:)\b\d+\.\d/g
//匹配结果:
222.1
301.3
122.1

惰性匹配

 .匹配任意除换行符“\n”外的字符; 

 *表示匹配前一个字符0次或无限次; 

 ?表示前边字符的0次或1次重复 

 +或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复;

 .*? 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。 

 如:a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。不加问号的话匹配的是aabab。

\num具体用法?

有两种情况:

1. num范围在1-99,表示匹配到第几个括号的重复字符。

具体用法只有:/(.)\1/ 用来匹配两个连续的字符。其他具体用法不明确

2. num是0或者是三位数,表示8进制所对应的ASCII码字符

str="1aa2"
str.match(/(.)\141/g)
结果:
["1a"]

\c的具体用法

\c匹配control+控制字符,就是说匹配由x指明的控制字符。

比如:\cj匹配control+j,代表\n。

\ca \cb \cc ... 又分别匹配 control+a, control+b,control+c....,具体他们等价于什么,看运行的程序了

百度搜索控制字符可以查看所有a-z的匹配

语法

  • [0-9]+匹配多个数字,[0-9]匹配单个数字,+匹配一个或多个。

  • {3,15}匹配长度介于3-15字符长度,{2}匹配确定的两次,{1,}至少匹配一次

  • 例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

  • 例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

  • ()标记一个表达式的开始和结束位置。

  • .匹配换行符\n之外的任何单字符。

  • \将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义字符。

  • {}标记限定符表达式的开始和结束

  • |指明两项之间的一个选择,一般配合()使用。

 

常用字符组

[\u4e00-\u9fa5] //匹配常用中文汉字(繁体字可能匹配不到)
[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[A-z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,英文句号和减号
[ \f\r\t\n\v] //匹配所有的白字符(空格、换页符、回车符、水平制表符、垂直制表符)
[^a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了双引号(")和单引号(')之外的所有字符
^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线组成的字符串
^[1-9][0-9]{0,}$ // 所有的正整数
^\-{0,1}[0-9]{1,}$ // 所有的整数
/^[-]?(0{1}|[1-9][0-9]*)(\.[0-9]+)?$/ // 所有的浮点数
 /^\w+@\w+\.\w+$/ //邮箱验证

实例

简单实践1

由于章节编号在大的输入文档中会很可能超过九,所以您需要一种方式来处理两位或三位章节编号。下面的正则表达式匹配编号为任何位数的章节标题

/Chapter [1-9][0-9]*/

含义:匹配Chapter 加上一个大于零的数字,[1-9]匹配1到9任何一个数字,[0-9]匹配0-9任何一个数字,*表示前面的表达式[0-9]匹配次数大于等于0。之所以不用+,是因为编号不一定需要两位数或者更多位数,之所以不用?,是因为它会让编号限制在两位数。

简单实践2

下面的正则表达式匹配一个章节标题,该标题只包含两个尾随数字,并且出现在行首:

/^Chapter [1-9][0-9]{0,1}/

真正的章节标题不仅出现行的开始处,而且它还是该行中仅有的文本。它即出现在行首又出现在同一行的结尾。下面的表达式能确保指定的匹配只匹配章节而不匹配交叉引用。通过创建只匹配一行文本的开始和结尾的正则表达式,就可做到这一点。

/^Chapter [1-9][0-9]{0,1}$/

简单表达式

/a/匹配字母a

/7/匹配数字7

/a.c/匹配以a开头,c结尾,中间除了\n以外的换行符。(.可以匹配字符串中打印或非打印字符,除了\n)

/index\.html/匹配index.html(.前面加反斜杠代表就是.)

请注意,没有串联运算符。只须在一个字符后面键入另一个字符。(通俗讲,两个子表达式或者匹配符之间不需要连接符)

中括号表达式

括在中括号表达式中的字符只匹配处于正则表达式中该位置的单个字符

/text [12345]/

可以匹配到text 1、text 2、text 3、text 4、text 5。

也可以写成  

/text [1-5]/

但是开始值必须小于结束值

如果在中括号中使用连字符-,请用以下三种方法:

(1) [/-]反斜杠转义

(2) [-a-z]或[a-z-]将连字符放在中括号的开始或者结尾

(3) [!--]或[!-~]创建一个范围开始值小于连字符,结束值大于等于连字符

/text [^1-5]/中括号内以^开头表示匹配除了中括号内以外的任何数字和字符

替换和分组:

替换使用 | 字符来允许在两个或多个替换选项之间进行选择。

/^Chapter|Section [1-9][0-9]{0,1}$/

上面的正则表达式要么匹配行首的单词 Chapter,要么匹配行尾的单词 Section 及跟在其后的任何数字。

/^(Chapter|Section) [1-9][0-9]{0,1}$/

在上面的正则表达式的适当位置添加括号,就可以使该正则表达式匹配 Chapter 1 或 Section 3

javascript-match()

Js中的match()可以查找一个或多个正则表达式可以匹配的字符串,当正则为全局匹配时,返回所有匹配成功的值组成的数组。当正则为非全局匹配时,返回第一个匹配成功的相关内容。如果没有匹配到则返回null。

g可以控制是否查找多个

var str ="1;9uisjflk;jamsg56a654ag654ga";
var reg=/\d/g;
console.log (str.match (reg));
结果:
["1", "9", "5", "6", "6", "5", "4", "6", "5", "4"]

匹配连续的

var str ="1;9uisjflk; jamsg56a654ag654ga";
var reg=/\d+/g;
console.log (str.match (reg));
结果:
["1", "9", "56", "654", "654"]

javascript-test()

Js中的test()可以验证字符串中有有没有符合要求的字符,如果字符串中有匹配的值返回 true ,否则返回 false。

var str="d2545ad5a4d54";
var patt=/\d/g;
var result=patt.test(str);
console.log(result);
结果:
true
exec()
Js中的 exec()可以提取正则中符合要求的值,并且以数组的形式返回,与match()方法有相似之处(主要是全局匹配时不同,match()会一次性返回所有符合的字符,exec()是一个个返回 )。
不全局匹配的话(不加g):返回一个数组:匹配到的字符、匹配到的字符位置、匹配的整个字符串本身:
var str="sad5a4d54add225sd22a";
var re=/\d+/;
console.log(re.exec(str),'第一次');
console.log(re.exec(str),'第二次');
console.log(re.exec(str),'第三次');
console.log(re.exec(str),'第四次');
结果:
["5", index: 3, input: "sad5a4d54add225sd22a", groups: undefined] "第一次"
["5", index: 3, input: "sad5a4d54add225sd22a", groups: undefined] "第二次"
["5", index: 3, input: "sad5a4d54add225sd22a", groups: undefined] "第三次"
["5", index: 3, input: "sad5a4d54add225sd22a", groups: undefined] "第四次"

如果全局匹配(加g):返回一个数组:匹配到的字符(每次调用指针会向后移一个,匹配到最后一个符合的字符,如果再次调用会返回null,如果还继续调用,就会从头开始匹配)、匹配到的字符位置、匹配的整个字符串本身

var str="sad5a4d54add225sd22a";
var re=/\d+/g;
console.log(re.exec(str),'第一次')
console.log(re.exec(str),'第二次')
console.log(re.exec(str),'第三次')
console.log(re.exec(str),'第四次')
console.log(re.exec(str),'第五次')
console.log(re.exec(str),'第六次')
console.log(re.exec(str),'第七次')
结果:
["5", index: 3, input: "sad5a4d54add225sd22a", groups: undefined] "第一次"
["4", index: 5, input: "sad5a4d54add225sd22a", groups: undefined] "第二次"
["54", index: 7, input: "sad5a4d54add225sd22a", groups: undefined] "第三次"
["225", index: 12, input: "sad5a4d54add225sd22a", groups: undefined] "第四次"
["22", index: 17, input: "sad5a4d54add225sd22a", groups: undefined] "第五次"
null "第六次"
["5", index: 3, input: "sad5a4d54add225sd22a", groups: undefined] "第七次"

javascript-search()

search()与indexOf()方法类似,用来查找指定字符串在字符串中出现的位置。

返回的是第一个符合要求的结果在整个字符串中的位置

如果没有符合正则要求的结果,返回-1

var str="sad5a4d54add225sd22a";
var re=/\d+/g;
console.log (str.search (re));
结果:
3

 

javascript-replace()

 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

var str="sad5a4d54add225sd22a";
var re=/\d+/g;
console.log (str.replace(re, "*"))
结果:
sad*a*d*add*sd*a

php-preg_replace()

函数执行一个正则表达式的搜索和替换

语法:mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

$pattern:要搜索的模式,可以是字符串或一个字符串数组。(正则表达式)

$replacement:用于替换的字符串或字符串数组。

$subject:要搜索替换的目标字符或字符串数组。

$limit:可选,对于每个模式用于每个subject字符串的最大可替换次数。默认是-1(无限制)。

$count:可选,替换执行的次数

返回值:

如果subject是一个数组,preg_replace()返回一个数组,其他情况返回一个字符串。

如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

    $str = 'runo o b';
    $str = preg_replace('/\s+/', '', $str); // 结果将会改变为'runoob'

使用基于数组索引的搜索替换

 $string = 'The quick brown fox jumped over the lazy dog.';
    $patterns = array();
    $patterns[0] = '/quick/';
    $patterns[1] = '/brown/';
    $patterns[2] = '/fox/';
    $replacements = array();
    $replacements[2] = 'bear';
    $replacements[1] = 'black';
    $replacements[0] = 'slow';
    //虽然下标是倒叙,但数组的实际顺序还是210,所以quick对应bear,brown对应black,fox对 应slow
    echo preg_replace($patterns, $replacements, $string);

结果:

The bear black slow jumped over the lazy dog.

使用其他参数:

    $count = 0;
    echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count);
    echo $count; //3

结果:

xp***to    3

笔记 正则表达式

在一些类似于文章博客的内容中,会用到模糊搜索检索多个字段,对于检索后的结果排序可能并不满意。

例如:

在CSDN搜索一篇博文,在输入关键字后会检索文章的标题,内容,分类,标签等内容,但是检索的排序结果可能不太理想,比如想优先显示标题中带有此关键字的文章,不管是按主键或者时间排序都是不行的。

下面我就简单的说明一下遇到这种问题的几种解决办法:

  • 利用LOCATE函数(MySQL数据库),按照匹配度进行排序。

    locate(subStr,string) 函数返回subStr在string中出现的位置,返回结果大于0代表着subStr出现的位置(从开始就存在则为1,即如果string中存在subStr最小值为1),如果等于0则说明subStr不存在。

检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据:

SELECT `name`,`memo`,locate('shx',`name`) as `order_name` FROM `cs_user`
where `name` like "%shx%" or `memo` like "%shx%"
order by `order_name` desc

检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据,如果`name`字段中'shx'信息出现的位置相同或者都不存在,即`order_name`为0时,则优先显示`memo`字段中存在'shx'信息并且出现位置靠前的数据

SELECT `name`,`memo`,locate('shx',`name`) as `order_name`,locate('shx',`memo`) as `order_memo`  
FROM `cs_user`where `name` like "%shx%" or `memo` like "%shx%"
order by `order_name` desc,`order_memo` desc

  • 等待更新

-
问题 笔记 MySQL 数据库

其实对于电影电视剧,完全可以按照豆瓣评分由高到低,直接全部看一遍,但其实很多高分剧并不是很符合一些人的口味,下面就是我平常闲来无事刷到的电视剧和电影,在我感觉还不错的,以下内容不分先后,篇幅会随时补充。

有些电影电视剧从正常途径包括腾讯视频、爱奇艺、优酷等等是看不到的,所以在这里我也放下一些网站方便大家去查找观看并下载:

  • 茶杯狐---首推,观看和下载二合一网站,适用于pc端和移动端。

  • 视频鱼---专门的下载网站,可以破解腾讯、爱奇艺、优酷等主流播放软件的一些视频。

  • 965影视---专门的观看模式,更新最快的网站,某些视频的超前点播可以在此看到。

电视剧篇

暗黑

《暗黑》,又名《dark德国烧脑神剧,豆瓣评分曾高达9.7分,第一部于2017年上映,共分三部,目前已完结。就个人体验来看,有必要带个小本本边记边看,又或者先看一遍剧情,不用担心会剧透,因为就算剧透了毫不影响你看正片时一样的懵逼。

该剧主要讲述了德国温登小镇的居民在1888年、1921年、1953年、1986年、2019年和2053年六条时间线和三个次元之间不停穿越试图终结循环的故事,具体内容我局不多做赘述了,相信光看时间线和三个次元就已经感受到编剧大脑的脑洞了。不过我可以说几个简要剧情:我的小伙伴穿越回去成为了我的爸爸、我是我自己的祖宗、我回到过去生下了我妈妈,这些只是整部剧槽点的一点点,最后基本上整个小镇的人都是几个人来回穿越产生的悖论集合体。

下面放一张图提前暴露一下人物关系,防止直接弃剧,人名请忽略,因为放真名字看不懂还特别长,图片来源和讲解请看片片说大片

暗黑人物关系图

仙剑奇侠传三

《仙剑奇侠传三》是根据国产单机游戏《仙剑奇侠传三》改编的同名古装玄幻电视剧,由上海唐人电影制作有限公司出品,胡歌、霍建华、杨幂、唐嫣、刘诗诗等联袂主演,该剧于2009年第一次上映,虽然是写着三但实际与前两部并没有关系,有觉得剧不错的可以去看一下仙剑奇侠传一,与本剧略微有些关系。

该剧讲述了渝州城永安当的小伙计景天和唐门大小姐雪见受到两人随身玉佩的彼此吸引,他们二人“热闹而又尴尬”地相识了,成了一对欢喜冤家。其实雪见和景天正是彼此的有缘人,而他们都来历不凡,身藏几世的秘密,随着雪见家族的剧变,二人阴差阳错地步入了江湖的血雨腥风之中,并结识了徐长卿、紫萱和龙葵等,众人走上了协助蜀山寻找五灵珠,封印锁妖塔的漫漫征途。在这个过程中,众人互相扶持,患难与共,历经重重磨难,终于获得五灵珠,战胜了邪剑仙,维护了人间的和平。

仙剑三,人间值得,本人已经不知道刷了多少次,在那个时代这样的特效放到现在来看依旧不过时。这部电视剧虽然是由游戏改编而成,更是为了游戏宣传而作,但很多人都以为先有的电视剧后有的游戏,最后导致多数人大骂游戏胡乱改编。

基本上所有主演(包括但不限于:景天-胡歌、雪见-杨幂、徐长卿-霍建华、龙葵-刘诗诗、紫萱-唐嫣、重楼、许茂山、邪剑仙、云霆、花楹)只有胡歌是原声。

而且剧中很多主演命名方式都是药名,例如:

景天,中药名,为景天科植物八宝的全草;

飞蓬:味辛,性凉,有辛凉解表的作用;

徐长卿 ,竹叶细辛,多年生直立草本;

雪见,别名 雪见草、癞蛤蟆草、青蛙草、皱皮草;龙葵,一年生草本植物;

花楹,又名凤凰木,是观赏树木;

重楼,一般重楼叶5-9,通常7片,轮生于茎顶,壮如伞,其上生花1朵,花梗青紫色或紫红色,故称七叶一枝花,是百合科植物重楼的根茎。

仙剑奇侠传三

黑镜

《黑镜》,又名《Black Mirror》,该片目前共六部(五季+圣诞特别篇),第一季在2011年12月播出,第二季2013年2月13日播出,圣诞特辑在2014年12月6日播出,第三季在2016年10月12日开播,第四季与2017年12月29日播出,第五季与2019年6月5日开播。

该剧分别以多个建构与现代科技甚至是未来科技的背景下,暗黑讽刺风格的独立故事,讲述了人性在科技的发展过程中是如何被利用、重构与破坏。

虽然故事情节略显夸张,但看完后细细品味,可不正是现代社会被科技支配下的缩影。科技是放大镜,放大了我们幸福的同时也毫不掩饰的将人性丑陋的一面展示在众人面前。有些剧情中本来主人公本来带着必死的决心去批判、唤醒当前的社会,可最终啼笑皆非的是他自己也成为了自己厌恶的那种作秀的人。

注意:此剧剧情非常压抑,甚至有些恶心,与正常电视剧发展迥然不同,大多数以黑暗为主,心理适应能力差者慎看!!!

1620807784841033.jpg

    等待更新……

电影篇

生化危机

生化危机》改编自游戏《生化危机》,又名《Resident Evil》,相信这部片子大家都耳熟能详了,可以说是百看不厌。

第一部《生化危机》于2002年上映,先后推出了《生化危机:启示录》(2004年)、《生化危机:灭绝》(2007)、《生化危机:战神再生》(2010年)、《生化危机:惩罚》(2012年),《生化危机:终章》(2017年)为该系列电影终结篇。

内容方面:故事发生在安布雷拉(保护伞)公司的生物工程实验室——“蜂巢”里,数百名遗传学、生物工程学专家正在进行一项科学研究,一种病毒突然爆发了并迅速传播着,而超级计算机“火焰女皇”为了控制病毒不让其外泄到地面上,将蜂巢全部封闭,但病毒很快感染了所有的工作人员并感染了全世界,人们一但被他们咬伤或被抓伤就会受到感染,甚至立即变成丧尸。然后整个故事是以有病毒抗体的艾丽丝为视角,克服各种突发事件,最后抢夺抗体成功,拯救世界的故事。

生化危机剧照

等待更新……

-
电影 电视剧

角色升级所需经验书

角色升级所需经验列表

流浪者的经验:1000角色经验

冒险家的经验:5000角色经验

大英雄的经验:20000角色经验

表格统计

等级

升级所需经验

大英雄经验书

冒险家经验书数量

流浪者经验书数量

所需摩拉数量

1级升20级所需:

大致30725经验

大约1.5本

大约6本

大约40本

大致24035个

10级升20级所需:

大致89450经验

大约4.5本

大约18本

大约89.5本

21级升30级所需:

大致242025经验

大约12本

大约48.5本

大约253本

大致135655个

31级升40级所需:

大致336300经验

大约17本

大约67本

大约336.5本

41级升50级所需:

大致579100经验

大约29本

大约116本

大约579.5本

大致155820个

51级升60级所需:

大致845125经验

大约42本

大约169本

大约845.5本

大致220825个

61级升70级所需:

大致1195925经验

大约60本

大约239本

大约1196本

大致319185个

71级升80级所需:

大致1611875经验

大约80.5本

大322约本

大约1612本

大致422375个

81级升90级所需:

大致3423125经验

大约171本

大约685本

大约3432本

大致804625个

角色总结

一个角色从1级到90级,需要经验8362650=418本大英雄的经验书=1673本冒险家的经验=8363本流浪者的经验,大约等于挑战蓝花41次,需要摩拉2460030个,约等于挑战金花22次,也就是说如果不算素材消耗的话需要树脂1260点,每天树脂如果不溢出是180点,也就是说正好一周刷地藏之花可以攒够经验和摩拉,各种元素晶石比较看脸,这里就不做估计了。

武器升级所需经验矿

四星武器表格统计

等级

升级所需经验

大经验矿数量

水晶矿数量

所需摩拉数量

1级升20级所需:

大致81000经验

8个

32个

大致8100个

20级升40级所需:

大致415125经验

41.5个

167个

大致46512个

41级升50级所需:

大致418725经验

42个

168个

大致56873个

51级升60级所需:

大致618400经验

62个

248个

大致81840个

61级升70级所需:

大致866050经验

87个

348个

大致116605个

71级升80级所需:

大致1166875经验

117个

468个

大致151687个

81级升90级所需:

大致2476475经验

248个

992个

大致292648个

五星武器表格统计

等级

升级所需经验

大经验矿数量

水晶矿数量

所需摩拉数量

1级升20级所需:

大致121550经验

12.5个

50个

大致12155个

20级升40级所需:

大致622800经验

62.5个

251个

大致72280个

41级升50级所需:

大致628150经验

63个

252个

大致82815个

51级升60级所需:

大致927675经验

93个

372个

大致122767个

61级升70级所需:

大致1299125经验

130个

520个

大致174913个

71级升80级所需:

大致1750375经验

170个

700个

大致230037个

81级升90级所需:

大致3714775经验

371.5个

1486个

大致436478个

武器总结

四星武器总共需要经验6042650,摩拉754265个。

四星武器总共需要经验9064450,摩拉1131445个。

-
原神

目录操作

  • 进入dir目录

cd dir
  • 返回上一级

cd ..
  • 返回上两级

cd ../..
  • 返回根目录

cd /
  • 切换磁盘,例如切换到F盘,不缺分大小写

f:
  • 查看当前目录下的文件和目录

dir
  • 创建名为dir的目录

md dir
  • 只能删除名为dir的空目录

rd dir
  • 删除dir文件,或者删除dir中一级目录下的文件(不包含目录和隐藏文件)

del dir
  • 复制dir文件到另一个dir2文件

copy dir dir2
  • 移动dir文件到另一个dir2文件

move dir dir2

其他操作

  • 清空cmd窗口内容

cls
  • 打开一个新cmd窗口

start cmd
  • 关闭cmd窗口

exit
  • 查看ip相关的参数

ipconfig
  • 检测IP地址的连通性,丢包率等

ping ip
  • 定时关机,单位秒,例如定时一小时关闭电脑

shutdown -s -t 3600
  • 取消定时关机

shutdown -a
  • 查看电脑最大运行内存,单位:KB

    不过这个命令存在很大疑惑,可能只是理论最大的单槽内存,具体还是建议去电脑官网查看。

wmic memphysical get maxcapacity
  • 把*.ts缓存文件合并成一个.ts文件

copy/b ts文件地址\*.ts 复制地址\newfile.ts
  • ts转mp4格式

ffnpeg -i 文件路径\newfile.ts -acodec copy -vcodec copy -f mp4 生成路径\newfile.mp4
  • 创建指定大小的文件,例如:在当前目录下创建一个名字为test.txt的10GB大小的文件,单位是B

fsutil file createnew test.txt 10737418240

-
笔记 命令行 Windows

搜索引擎

目前最常用的搜索引擎,没啥好说的,就是感觉现在广告越来越多了,而且有些东西局限性太大,有的有太夸张,就像大家说的,百度疾病癌症起步~

世界上最大的搜索引擎之一,可以检索国外网站信息,但是和YouTube一样需要自己翻墙后使用,推荐速鹰666可以实现,稳定性和网速都不错,内有教程和说明。

和百度差不多,都是国内比较大的搜索引擎,一样的广告政策,没什么亮点。

秘迹搜索是一个界面简洁但是功能强大的良心搜索网站,可以帮你过滤搜索结果里面的广告。

它主要的特点就是:一个不追踪你的搜索引擎,不会根据搜索关键词追踪用户,也不会通过历史搜索内容做广告推荐,它也没有在你的浏览器上种任何Cookie。

它还有的特点就是帮助你过滤搜索结果的广告信息,帮你屏蔽搜索结果的广告,让你可以轻松的找到你需要的结果,并且提供一键聚合搜索。

微软所出的一款搜索引擎,目前改名为:Microsoft Bing,目前对它的评价褒贬不一,不过某些方面上比百度强一些,比如说学术文章、答案什么的归类汇总。

一款主要为了检索文档文章小说一类的的搜索引擎,只不过下载时可能需要关注可恶的公众号。

娱乐相关

集合各个站点的热点排行榜,包括但不限于:微博、知乎、微信、哔哩哔哩、抖音、百度……

一个纯粹的展示装逼界面,内容很大,网速不佳的可能打开速度非常慢。打开后选择一种模式,只要随便敲击键盘,就会像电影中一样闪现不同的代码和窗口。

用超高像素看世界,里面的图片都是几十亿像素起步的,甚至内部还有上千亿像素的图片供你欣赏。照片内容也值得一看,比如说七亿像素的的清明上河图足够你看清任何细节,184亿像素故宫皇极殿内景,800亿像素北京天际线……

可查看世界各个地方,而且基本除中国外都有街景,足不出户可以查看世界各大景点,但是和YouTube一样需要自己翻墙后使用,推荐速鹰666可以实现,稳定性和网速都不错,内有教程和说明。

可以查看地球风向,包括洋流和台风在内,你可以观察到风起地点,以及范围,还可以更改高度。

可以知道地球轨道外有多少悬浮垃圾,并且每一片你都能知道确切的来源。

实时卫星预计应该是每隔一小时左右更新一次,但是如果拖动放大可能就是几年的前的图片了,卫星也不可能一直发送超高像素的全球图片。

界面很玄幻,很高级,但具体是不是真的我也不是很清楚,反正不是很懂,主要是看个热闹。

  • 360°全景

    内含各种景点高清图片,可以全景3D查看每个地方,更有3D视频可以查看。

实用相关

可以查询淘宝、京东、拼多多等多个平台商品的历史价格,包括使用优惠券减免后的价格,缺点是查看长期价格变动目前需要关注公众号,但是总体还是一个比较靠谱的网站,再也不会因为价格而犹豫了。

个性化你的电脑设备,探索丰富多彩的主题、壁纸、图标、皮肤等酷炫的美化素材。可以修改电脑主题,背景,鼠标样式等,花样繁多,总有一款适合你。

U盘忘带了或者软件有文件传输上限,不要怕,这个网址可以帮你解决这些问题,免于登陆处理,只需上传文件,生成密码,其他人凭借密码就可以在其他地方登录网站下载,不过不建议上传很重要的文件,以防泄露。

提供各种优质、快捷、易用的在线工具,无需下载安装即可使用,有图片和视频的压缩、处理、合并以及其他小功能。

一个较大的工具箱,内部的在线功能应该是分享中最大的一款网站,涉及面广而全,但其实更适合一些有计算机基础的人使用。

为大家提供简单、有趣、好用的在线工具大全。适用于生成各种昵称、头像以及符号。

也是收录了一些实用工具,可能与其他工具箱重复但也有自己的特色,比如:表白网址生成、朋友圈随机语录……

收入了一些免费、稳定、快速的API数据接口调用服务平台,例如:生成随机密码、生成短链接、生成二维码,域名详情查询、手机号所属地区……

  • 等待更新……

-
浏览器 网站 收藏 实用

什么是跨域?

浏览器的同源策略(Same origin policy),它是一种约定,也是浏览器最核心最基本的安全功能。所谓同源指的是:协议(是指http和https)、域名(domain)、端口(port)相同。

解决办法

在php后端api入口文件中加入下面的代码即可解决问题:

header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");

相关说明

CORS

CORS是一个W3C标准,全称是“跨域资源共享”(Cross-origin resource sharing),它允许浏览器向跨源服务器发出XMLHttpRequest请求,从而克服了只能同源调用的限制。

Access-Control-Allow-Origin

Access-Control-Allow-Origin指的是允许发起跨域的域名。

在浏览器跨域请求中,请求头(request headers)会出现Origin字段(有个奇怪现象,谷歌游览器在非跨域情况下,也会发送origin字段),这个字段会与Access-Control-Allow-Origin字段的内容进项匹配,如果发现符合Access-Control-Allow-Origin字段的要求才会放行通过,否则会出现CORS错误。

但实际上Access-Control-Allow-Origin有很多的设置方式,“*”是最粗暴简单的,但也是最不安全的,它代表着所有请求都允许通过。如果为了服务器安全考虑不建议这么设置,最好还是使用具体的域名地址。而且如果是“*”的话,浏览器将不会发送cookies,即使你的xhr设置了withCredentials,只有在指定域名下才允许发送。

Access-Control-Allow-Methods

Access-Control-Allow-Methods指的是请求的方式。

Access-Control-Allow-Headers

Access-Control-Allow-Headers指的是请求的自定义请求头字段。

跨域时浏览器会向服务器发送预检请求,询问是否支持跨域的自定义header字段,这时候就需要设置的Access-Control-Allow-Headers字段进行应答。

-
PHP 问题 后端 前端

map()和parseInt()相遇的结果

先说一下结论:[1, NaN, NaN],造成这样的原因是什么呢?

首先要先理解函数的意义,map()是将数组的每个元素传递给指定的函数处理,并返回处理后的数组,原数组不改变。单纯这样看可能就会出现脑子里一开始的答案[1,2,3],但为什么不是呢,重点来了!

map()函数是将1,2,3作为元素,和下标0,1,2分别传递给parseInt()函数,其实每个效果写出来就是:parseInt('1',0),parseInt('2',1),parseInt('3',2)的结果。parseInt()函数第二个参数的意义是指明前面参数的进制,从而转化成十进制输出,区间范围是0和2-36,默认是十进制也就是0。0默认是十进制所以1还是1,1不在有效范围内所以2变成NaN,2要求前面的参数必须以二进制0和1开头开始,所以也是NaN。

事件异步引发的血案

先上一段代码,假设页面中有4个li标签猜猜输出什么?

var elements=document.getElementsByTagName('li');
var li_length=elements.length;
for (var i=0;i<li_length;++i){
    elements[i].onclick=function () {
        alert(i)
    }
}

答案:不管点哪一个一直输出4。

这其实就是事件异步引发的问题,循环过程中对DOM元素事件是绑定成功的,这一点是没有问题的,但是alert中的i却一直是以变量的形式存在的,当i经过一套for循环下来后最终的值变成了4,所以当点击事件触发,去调用i这个值时,是调用的当前变量内容,而不是覆盖之前的变量内容。

其实可以更明显一点,直接在循环外面去改变i的值,比如说在for循环下面给i赋值为999,那么当你触发点击事件时就会输出999;

当数组欺骗length时……

先上一段代码猜猜输出什么?

var arr=[];
arr[1]=9;
arr[3]=99;
arr[9]=999;
arr['a']='b';
arr['c']='d';
console.log(arr.length)

答案:10。

这里length实际上是根据数组的下标获取,而数组下标是从0开始的,所以这里获取最大下标9,然后加1最终返回的结果10。假设没有任何一个数值下标的元素,则就会输出0。

其实在js中数组的下标是不能存在字符串的,但如果我们尝试着把字符串作为下标使用,其实js会把这个认为是属性来看待,就像我们的对象一样,以键值对的形式存在。

数组的浅复制

有些代码不是单纯赋值之后就会分割成两个个体。

var arr=[1,2,3,4,5];
var arr2=arr;
arr[1]=999;
console.log(arr2[1])//999

这里虽然看上去是把arr的值赋给了arr2,实际上只是把arr的地址赋给了arr2,所以当我们改变arr的值时,arr2对应的值也会改变。

要想完全复制出来一份数组可以用以下方式:

var arr=[1,2,3,4,5];
var arr2=[...arr];
arr[1]=999;
console.log(arr2[1])//2

every()、some()以及filter()关系

every()和some()都是迭代函数,二者都是接受一个返回值为布尔值的自定义函数,对数组中的每个元素使用该函数,最终every()或some()返回一个布尔值。不同的是every()要求数组中的每个元素通过自定义函数时都返回true,那every()本身才会返回true,而some()中的自定义函数只要有一个返回true,则some()就会返回true。

function isEven(num) {
    return num % 2 == 0;
}
var nums = [2,4,6,8,10];
var nums2 = [2,4,7,8,10];
var nums3 = [1,3,5,7,9];
console.log(nums.every(isEven));//true
console.log(nums2.every(isEven));//false
console.log(nums2.some(isEven));//true
console.log(nums3.some(isEven));//false

而filter()也是迭代函数,和every()类似,但是他返回的不是布尔值,而是经过自定义函数返回值为true的元素。

function isEven(nums){
    return nums%2==0;
}
var arr=[1,2,3,4,5,6,7,8,9];
var arr2=arr.filter(isEven)
console.log(arr2)//[2,4,8]

-
jQuery JavaScript

插件篇

GitLens

理由:可以跟踪每行代码的git提交修改记录。

2.png

而且可以追溯这个文件所有提交记录

1.png

Chinese (Simplified) Language

中文简体语言包

koroFileHeader

用于生成文件头部注释和函数注释的插件

使用篇

-
VSCode 插件

前言

原来开发过支付宝的支付,但是时间太长,现在更新又这么快,所以又回过头重新研究了一遍支付宝沙箱环境下的支付。目前来说只能研究沙箱环境下的支付了,因为其他的都需要各种证书才能申请,个人小网站目前来说还不支持。

开发步骤

  1. 去支付宝开放平台注册申请账号:支付宝开放平台,因为我的博客是网页,所以我去‘网页&移动应用’申请了一个应用。

    QQ截图20210305104426.png

  2. 去研发环境->沙箱环境设置好RSA2(SHA256)密钥,密钥生成方式官方提供了详细文档,下面我也会详细说明一下。

  3. 首先根据系统下载生成器。

    QQ截图20210305105356.png

  4. 打开软件后先点击:生成秘钥,然后点击:打开秘钥位置,即可获得一个公钥和一个私钥。

    微信图片_20210305105528.pngQQ截图20210305105648.png

  5. 点击一开始沙箱环境的RSA2(SHA256)密钥中的设置,只需要将公钥内容复制到文本框中,其它默认就会自动生成公钥了。QQ截图20210305110157.png

  6. 然后去官方文档中下载PHP的demoQQ截图20210305110343.png

  7. 下载完成后打开根目录下的config.php进行配置。其中以下三样分别填入app_id、gatewayUrl、alipay_public_key。

    1614913569791290.png

  8. 私钥请使用一开始软件生成的那个文件中的内容,至于两个地址return_url和notify_url中的域名必须用线上地址,不能使用本地开发,其他参数默认即可。

  9. 可以设置return_url.php和notify_url.php中的逻辑来测试一些内容,内部有详细的注释这里我就不多说了,然后运行根目录下的index.php即可。

  10. 选择支付时,因为这里是测试沙箱,所以使用官方提供的测试账号。

    微信图片_20210305111521.png

  11. end

注意事项

  • config.php一定要用支付宝公钥而不是应用公钥。

  • 谷歌浏览器可能会有拦截,建议使用其他浏览器测试。

  • 本地无法测试沙箱环境,必须使用线上地址。

  • 支付宝正式网关和测试网关非常相似,一定检查仔细(本人掉到坑里了)。

-
支付 实用 教程