-
(强烈推荐收藏!)使用Python验证常见的50个正则表达式
2021-01-31 22:55:01目录 什么是正则表达式? Python如何支持正则? 1.邮箱 2. 身份证号 ...什么是正则表达式?...正则表达式(Regular Expression)通常被用来检索、替换那些符合...此处的Regular即是规则、规律的意思,Regular Expression目录
什么是正则表达式?
正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。
此处的Regular即是规则、规律的意思,Regular Expression即“描述某种规则的表达式”之意。
本文收集了一些常见的正则表达式用法,方便大家查询取用,并在最后附了详细的正则表达式语法手册。
案例包括:「邮箱、身份证号、手机号码、固定电话、域名、IP地址、日期、邮编、密码、中文字符、数字、字符串」
Python如何支持正则?
我用的是python来实现正则,并使用Jupyter Notebook编写代码。
Python通过re模块支持正则表达式,re 模块使 Python 语言拥有全部的正则表达式功能。
这里要注意两个函数的使用:
re.compile
用于编译正则表达式,生成一个正则表达式( Pattern )对象;.findall
用于在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。# 导入re模块 import re
1.邮箱
包含大小写字母,下划线,阿拉伯数字,点号,中划线
表达式:
[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)
案例:
pattern = re.compile(r"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)") strs = '我的私人邮箱是zhuwjwh@outlook.com,公司邮箱是123456@qq.org,麻烦登记一下?' result = pattern.findall(strs) print(result)
['zhuwjwh@outlook.com', '123456@qq.org']
2. 身份证号
xxxxxx yyyy MM dd 375 0 十八位
-
地区:[1-9]\d{5}
-
年的前两位:(18|19|([23]\d)) 1800-2399
-
年的后两位:\d{2}
-
月份:((0[1-9])|(10|11|12))
-
天数:(([0-2][1-9])|10|20|30|31) 闰年不能禁止29+
-
三位顺序码:\d{3}
-
两位顺序码:\d{2}
-
校验码:[0-9Xx]
表达式:
[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]
案例:
pattern = re.compile(r"[1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]") strs = '小明的身份证号码是342623198910235163,手机号是13987692110' result = pattern.findall(strs) print(result)
['342623198910235163']
3. 国内手机号码
手机号都为11位,且以1开头,第二位一般为3、5、6、7、8、9 ,剩下八位任意数字
例如:13987692110、15610098778表达式:
1(3|4|5|6|7|8|9)\d{9}
案例:
pattern = re.compile(r"1[356789]\d{9}") strs = '小明的手机号是13987692110,你明天打给他' result = pattern.findall(strs) print(result)
['13987692110']
4. 国内固定电话
区号3~4位,号码7~8位
例如:0511-1234567、021-87654321
表达式:
\d{3}-\d{8}|\d{4}-\d{7}
案例:
pattern = re.compile(r"\d{3}-\d{8}|\d{4}-\d{7}") strs = '0511-1234567是小明家的电话,他的办公室电话是021-87654321' result = pattern.findall(strs) print(result)
['0511-1234567', '021-87654321']
5. 域名
包含http:\\或https:\\
表达式:
(?:(?:http:\/\/)|(?:https:\/\/))?(?:[\w](?:[\w\-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:\/)
案例:
pattern = re.compile(r"(?:(?:http:\/\/)|(?:https:\/\/))?(?:[\w](?:[\w\-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:\/)") strs = 'Python官网的网址是https://www.python.org/' result = pattern.findall(strs) print(result)
['https://www.python.org/']
6. IP地址
IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位,用十进制数字表示
每段数字范围为0~255,段与段之间用句点隔开表达式:
((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
案例:
pattern = re.compile(r"((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))") strs = '''请输入合法IP地址,非法IP地址和其他字符将被过滤! 增、删、改IP地址后,请保存、关闭记事本! 192.168.8.84 192.168.8.85 192.168.8.86 0.0.0.1 256.1.1.1 192.256.256.256 192.255.255.255 aa.bb.cc.dd''' result = pattern.findall(strs) print(result)
['192.168.8.84', '192.168.8.85', '192.168.8.86', '0.0.0.1', '56.1.1.1', '192.255.255.255']
7. 日期
常见日期格式:yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd
表达式:
\d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2}
案例:
pattern = re.compile(r"\d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2}") strs = '今天是2020/12/20,去年的今天是2019.12.20,明年的今天是2021-12-20' result = pattern.findall(strs) print(result)
['2020/12/20', '2019.12.20', '2021-12-20']
8. 国内邮政编码
我国的邮政编码采用四级六位数编码结构
前两位数字表示省(直辖市、自治区)
第三位数字表示邮区;第四位数字表示县(市)
最后两位数字表示投递局(所)表达式:
[1-9]\d{5}(?!\d)
案例:
pattern = re.compile(r"[1-9]\d{5}(?!\d)") strs = '上海静安区邮编是200040' result = pattern.findall(strs) print(result)
['200040']
9. 密码
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
表达式:
[a-zA-Z]\w{5,17}
强密码(以字母开头,必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
表达式:
[a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}
pattern = re.compile(r"[a-zA-Z]\w{5,17}") strs = '密码:q123456_abc' result = pattern.findall(strs) print(result)
['q123456_abc']
pattern = re.compile(r"[a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}") strs = '强密码:q123456ABc,弱密码:q123456abc' result = pattern.findall(strs) print(result)
['q123456ABc,']
10. 中文字符
表达式:
[\u4e00-\u9fa5]
案例:
pattern = re.compile(r"[\u4e00-\u9fa5]") strs = 'apple:苹果' result = pattern.findall(strs) print(result)
['苹', '果']
11. 数字
-
验证数字:
^[0-9]*$
-
验证n位的数字:
^\d{n}$
-
验证至少n位数字:
^\d{n,}$
-
验证m-n位的数字:
^\d{m,n}$
-
验证零和非零开头的数字:
^(0|[1-9][0-9]*)$
-
验证有两位小数的正实数:
^[0-9]+(.[0-9]{2})?$
-
验证有1-3位小数的正实数:
^[0-9]+(.[0-9]{1,3})?$
-
验证非零的正整数:
^\+?[1-9][0-9]*$
-
验证非零的负整数:
^\-[1-9][0-9]*$
-
验证非负整数(正整数 + 0)
^\d+$
-
验证非正整数(负整数 + 0)
^((-\d+)|(0+))$
-
整数:
^-?\d+$
-
非负浮点数(正浮点数 + 0):
^\d+(\.\d+)?$
-
正浮点数
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
-
非正浮点数(负浮点数 + 0)
^((-\d+(\.\d+)?)|(0+(\.0+)?))$
-
负浮点数
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
-
浮点数
^(-?\d+)(\.\d+)?$
12. 字符串
-
英文和数字:
^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
-
长度为3-20的所有字符:
^.{3,20}$
-
由26个英文字母组成的字符串:
^[A-Za-z]+$
-
由26个大写英文字母组成的字符串:
^[A-Z]+$
-
由26个小写英文字母组成的字符串:
^[a-z]+$
-
由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
-
由数字、26个英文字母或者下划线组成的字符串:
^\w+$ 或 ^\w{3,20}$
-
中文、英文、数字包括下划线:
^[\u4E00-\u9FA5A-Za-z0-9_]+$
-
中文、英文、数字但不包括下划线等符号:
^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
-
可以输入含有^%&',;=?$\”等字符:`[^%&',;=?$\x22]+`
-
禁止输入含有~的字符:
[^~\x22]+
附:正则表达式语法详解
字符 描述 \
将下一个字符标记为一个特殊字符(File Format Escape,清单见本表)、或一个原义字符(Identity Escape,有^$()*+?.[{|共计12个)、或一个向后引用(backreferences)、或一个八进制转义符。例如,“ n
”匹配字符“n
”。“\n
”匹配一个换行符。序列“\\
”匹配“\
”而“\(
”则匹配“(
”。^
匹配输入字符串的开始位置 $
匹配输入字符串的结束位置 *
匹配前面的子表达式零次或多次。例如,zo*能匹配“ z
”、“zo
”以及“zoo
”。*等价于{0,}。+
匹配前面的子表达式一次或多次。例如,“ zo+
”能匹配“zo
”以及“zoo
”,但不能匹配“z
”。+等价于{1,}。?
匹配前面的子表达式零次或一次。例如,“ do(es)?
”可以匹配“does
”中的“do
”和“does
”。?等价于{0,1}。{n}
n是一个非负整数。匹配确定的n次。例如,“ o{2}
”不能匹配“Bob
”中的“o
”,但是能匹配“food
”中的两个o。{n,}
n是一个非负整数。至少匹配n次。例如,“ o{2,}
”不能匹配“Bob
”中的“o
”,但能匹配“foooood
”中的所有o。“o{1,}
”等价于“o+
”。“o{0,}
”则等价于“o*
”。{n,m}
m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“ o{1,3}
”将匹配“fooooood
”中的前三个o。“o{0,1}
”等价于“o?
”。请注意在逗号和两个数之间不能有空格。?
非贪心量化(Non-greedy quantifiers):当该字符紧跟在任何一个其他重复修饰符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是「非」贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“ oooo
”,“o+?
”将匹配单个“o
”,而“o+
”将匹配所有“o
”。.
匹配除“ \r
”“\n
”之外的任何单个字符。要匹配包括“\r
”“\n
”在内的任何字符,请使用像“(.\|\r\|\n)
”的模式。(pattern)
匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“ \(
”或“\)
”。可带数量后缀。(?:pattern)
匹配pattern但不获取匹配的子字符串(shy groups),也就是说这是一个非获取匹配,不存储匹配的子字符串用于向后引用。这在使用或字符“ (\|)
”来组合一个模式的各个部分是很有用。例如“industr(?:y\|ies)
”就是一个比“industry\|industries
”更简略的表达式。(?=pattern)
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“ Windows(?=95\|98\|NT\|2000)
”能匹配“Windows2000
”中的“Windows
”,但不能匹配“Windows3.1
”中的“Windows
”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。(?!pattern)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“ Windows(?!95\|98\|NT\|2000)
”能匹配“Windows3.1
”中的“Windows
”,但不能匹配“Windows2000
”中的“Windows
”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始(?<=pattern)
反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,“ (?<=95\|98\|NT\|2000)Windows
”能匹配“2000Windows
”中的“Windows
”,但不能匹配“3.1Windows
”中的“Windows
”。(?<!pattern)
反向否定预查,与正向否定预查类似,只是方向相反。例如“ (?<!95\|98\|NT\|2000)Windows
”能匹配“3.1Windows
”中的“Windows
”,但不能匹配“2000Windows
”中的“Windows
”。x\|y
没有包围在()里,其范围是整个正则表达式。例如,“ z\|food
”能匹配“z
”或“food
”。“(?:z\|f)ood
”则匹配“zood
”或“food
”。[xyz]
字符集合(character class)。匹配所包含的任意一个字符。例如,“ [abc]
”可以匹配“plain
”中的“a
”。特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位(或末尾)则仅作为普通字符。右方括号应转义出现,也可以作为首位字符出现。[^xyz]
排除型字符集合(negated character classes)。匹配未列出的任意字符。例如,“ [^abc]
”可以匹配“plain
”中的“plin
”。[a-z]
字符范围。匹配指定范围内的任意字符。例如,“ [a-z]
”可以匹配“a
”到“z
”范围内的任意小写字母字符。[^a-z]
排除型的字符范围。匹配任何不在指定范围内的任意字符。例如,“ [^a-z]
”可以匹配任何不在“a
”到“z
”范围内的任意字符。[:name:]
增加命名字符类(named character class)中的字符到表达式。只能用于「方括号表达式」。 [=elt=]
增加当前locale下排序(collate)等价于字符“elt”的元素。例如,[=a=]可能会增加ä、á、à、ă、ắ、ằ、ẵ、ẳ、â、ấ、ầ、ẫ、ẩ、ǎ、å、ǻ、ä、ǟ、ã、ȧ、ǡ、ą、ā、ả、ȁ、ȃ、ạ、ặ、ậ、ḁ、ⱥ、ᶏ、ɐ、ɑ 。只能用于方括号表达式。 [.elt.]
增加排序元素elt到表达式中。这是因为某些排序元素由多个字符组成。例如,29个字母表的西班牙语, "CH"作为单个字母排在字母C之后,因此会产生如此排序“cinco, credo, chispa”。只能用于方括号表达式。 \b
匹配一个单词边界,也就是指单词和空格间的位置。例如,“ er\b
”可以匹配“never
”中的“er
”,但不能匹配“verb
”中的“er
”。\B
匹配非单词边界。“ er\B
”能匹配“verb
”中的“er
”,但不能匹配“never
”中的“er
”。\cx
匹配由x指明的控制字符。x的值必须为 A-Z
或a-z
之一。否则,将c视为一个原义的“c
”字符。控制字符的值等于x的值最低5比特(即对3210进制的余数)。例如,\cM匹配一个Control-M或回车符。\ca等效于\u0001, \cb等效于\u0002, 等等…\d
匹配一个数字字符。等价于[0-9]。注意Unicode正则表达式会匹配全角数字字符。 \D
匹配一个非数字字符。等价于[^0-9]。 \f
匹配一个换页符。等价于\x0c和\cL。 \n
匹配一个换行符。等价于\x0a和\cJ。 \r
匹配一个回车符。等价于\x0d和\cM。 \s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。注意Unicode正则表达式会匹配全角空格符。 \S
匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 \t
匹配一个制表符。等价于\x09和\cI。 \v
匹配一个垂直制表符。等价于\x0b和\cK。 \w
匹配包括下划线的任何单词字符。等价于“ [A-Za-z0-9_]
”。注意Unicode正则表达式会匹配中文字符。\W
匹配任何非单词字符。等价于“ [^A-Za-z0-9_]
”。\xnn
十六进制转义字符序列。匹配两个十六进制数字nn表示的字符。例如,“ \x41
”匹配“A
”。“\x041
”则等价于“\x04&1
”。正则表达式中可以使用ASCII编码。.\num
向后引用(back-reference)一个子字符串(substring),该子字符串与正则表达式的第num个用括号围起来的捕捉群(capture group)子表达式(subexpression)匹配。其中num是从1开始的十进制正整数,其上限可能是9、31、99,甚至无限。例如:“ (.)\1
”匹配两个连续的相同字符。\n
标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。 \nm
3位八进制数字,标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。 \nml
如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。 \un
Unicode转义字符序列。其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配著作权符号(©)。 优先权
优先权 符号 最高 \
高 ()
、(?:)
、(?=)
、[]
中 *
、+
、?
、{n}
、{n,}
、{n,m}
低 ^
、$
、中介字符次最低 串接,即相邻字符连接在一起 最低 \|
-
-
patch是什么意思啊_首次文身,应该选择什么部位?(锁骨篇)
2020-11-11 22:52:34没有看过上一篇的童鞋们,强烈推荐先读一下首次文身,应该选择什么部位?(脚踝篇) ——因为今天会提到的一些视觉原理,在上一篇里有详细的讲解。老样子,所有图片出处见水印。锁骨篇先说结论:锁骨也是我比较推荐...没有看过上一篇的童鞋们,强烈推荐先读一下首次文身,应该选择什么部位?(脚踝篇) ——因为今天会提到的一些视觉原理,在上一篇里有详细的讲解。
老样子,所有图片出处见水印。
锁骨篇
先说结论:锁骨也是我比较推荐做第一个文身的位置。
我所认为的“适合成为第一个”的文身,必须拥有以下几个特征:
- 不太大
- 不太疼(因为面积小/图案简单/部位不敏感)
- 必要的时候能藏住,想显也能露出来
- 最好自己能看到
锁骨几乎满足每一项,除了最后一条得照镜子,稍微麻烦点。
再说说缺点:
- 比较适合女生,男生做会比较娘气
- 万一做得不好,就只有用很大的图(胸花)来盖了。
总的来说,选对了文身师,锁骨会是个非常nice的选择~
来说说坑:什么样的锁骨文身是难看的呢?
“视觉舒适”这个概念在上一篇首次文身,应该选择什么部位?(脚踝篇)里有详细讲解,再次提醒没读过的童鞋一定要先去看呐~
我们先来看看颈部以下、胸部以上有几个视觉中心。
对于胸部丰满的人来说,两个:肩球体块和锁骨视平线。再往下就是胸部体块了。
但对于大部分普通亚洲女性来说,胸部容易比较平,不会像上图那样丰满。。。于是还会多一个前胸视觉空间,这个空间以下才是胸部:
没错,前胸视觉中心的面积就是这么大~
想要一个位置的文身视觉舒适,通常需要文身的面积覆盖整个视觉中心。这就是文身师们所说的“大胸花”了:
胸花我们以后再谈,我提这个例子的意思是——在锁骨下方做文身,如果不是紧贴着锁骨视平线,只要稍微靠下一点,实际上就做到了前胸视觉中心。
严格地说,这种已经不属于锁骨文身了,而属于“做在前胸的小图”。我在前两篇文章中说过,如果一个文身做在大体块上、同时面积又小于它所在的体块,就会有“突兀感”,因为小图打破了这个视觉中心,造成了“视觉不舒适”。
比如像这样的:
它破坏了整体的视觉效果,所以不太好看:
同学们,要小心这种情况鸭!做锁骨文身,最怕的就是不小心和胸部混为一谈,把适合锁骨的形状做到了胸部体块,造成突兀难看的结果。
那么,什么样的锁骨文身是“视觉舒适”的呢?
有以下几种:
1.线形
有些人的锁骨倾斜比较厉害,会和视平线形成一个角度。
视觉舒适的线形文身,应该是紧贴视平线的,而不是锁骨的边缘线。
因为视平线同时符合“人体形”原理,所以视觉上流畅感会更好,比较大气。当大的视觉中心和小的有所交错时,跟着大的走通常会显得比较大气,而跟着小的则会显得小气。
对比下面两个图,是否跟视平线的左图显得比较大气、跟锁骨线的右图显得比较小气呢?
2.雪糕筒形
同时覆盖视平线+肩球体块。
锁骨v形比较明显的人,比较适合做这种形状的文身,而锁骨比较平的,其实比较适合线形。
雪糕筒形的特征是从喉头开始,在肩球处散开;只要符合这个特征的,都是典型的雪糕筒形,比如下图这种:
3.人体形
关于“人体形”的概念,在上一篇首次文身,应该选择什么部位?(脚踝篇)里有详细讲解。这个方法参考的是人体的走势,而不局限于肌肉体块的形状。
上图的视觉原理:
不推荐以下几种形状的锁骨文身:
1.圆形/接近圆形的一小块
圆形是一个不适合锁骨视感的形状,而且很容易做到下方胸口,造成视觉上的突兀感。
如果非常喜欢圆形的话,建议做在肩球位置,千万不要做到胸口。
不舒服的圆形文身:
肩球处会好很多:
2.苍蝇
指甲盖以下大小的mini小文身统称苍蝇,尤其是实心的,因为远看就像是一只苍蝇或者一颗大痣……苍蝇可以做在不重要的地方例如踝关节以下(《脚踝篇》里有讲过)。锁骨由于离脸近,是比较惹人注目的位置,所以……如果一定要做苍蝇的话,请做成空心的/淡彩色的,至少让它不要过于显眼。
3.左右连接的线形
左右连接的线形看似符合视平线,其实破坏了人体的中轴线(非常重要的视感)。记住,当大的视觉中心和小的有所交错时,跟着大的走。
4.圆弧形
过于绵软。圆弧形想要好看,势必是要通过大面积+锋利的骨干去平衡形状本身的绵软无力感的,如下图。
而小文身是很难做到这一点的。没有了锐气,会显得很“肉”,这就是不推荐的理由。
好了理论讲得差不多了~
锁骨这个位置,其实比较复杂。每个人的锁骨形状都长得不太一样,有的很平,有的是v形……有的人肩球很明显有人不明显,有的人胸肌很发达有人完全没有……结构复杂的部位,可能性也很多,以上只是简单总结的视觉原理,具体问题还是要具体分析呦~
我是文身艺术家补丁,毕业于清华美院。工作室位于上海。
我的作品:微博:Sina Visitor System,ins:patch_tattoo_therapy
公众号:补丁tattoo
微信仅预约使用:patch_tattoo_therapy (除预约以外的其他事情,请通过知乎私信或微博留言,谢谢!)
-
一个好的浏览器是多么重要,强烈推荐一个好用的浏览器.........
2020-03-27 20:47:46什么,你不知道祖安是什么意思?没关系,可以搜索词条啊,最近祖安确实进入了大众的视野,祖安文化在蔓延,本来不知道祖安的我好奇的搜索了一下祖安。 什么你以为我会给你科普一下祖安文化,交流祖安心得,我怎么...什么,你不知道祖安是什么意思?没关系,可以搜索词条啊,最近祖安确实进入了大众的视野,祖安文化在蔓延,本来不知道祖安的我好奇的搜索了一下祖安。
什么你以为我会给你科普一下祖安文化,交流祖安心得,我怎么可能会和你来一次祖安思想的碰撞!
所以这次我想说的是如何教你正确的使用搜索引擎,那么我们首先来举个例子,看组图片的对比,请看下面一组图片:这是第一张图----
这是第二张图:
很明显看出什么?如果没有请继续看下图,我搜索了一下头疼怎么办,你应该会更加明显。
某度现在做的竞价实在是太恶心,搜索一个词条靠前几名都是广告,现在我用某度就是看下电脑是不是有网络,电脑网速怎么样!
如果你能科学上网(翻墙),用梯子,最好还是用谷歌搜索引擎,毕竟谷歌(Do not be evil)不作恶,如果不行,一脚给你介绍一个国内良心搜索引擎,不作恶,不追踪
多吉搜索: https://www.dogedoge.com/
界面很简洁,申明我没有收广告钱,没做推广,这个确实很好用。
写在最后,现在貌似获取知识的渠道途径有很多,各种各样的搜索引擎,各种网站,各种短视频,来一个很官方阐述,就似乎是权威了,我们貌似缺少了独立思考的一个过程,之前我们了解一个事情,认识一件事物,可能就是靠长辈传授,向人打听,而现在我们能轻松认识一个事情,科技确实改变了我们的生活,但是我们也会在里面迷失自己,搜索引擎或许不能帮助你改变什么,但是请保持理智的思考。若你有什么更加好用的搜索网站,不妨说出来一起交流学习。
最近一段时间一直在更新公众号,这篇为我公众号内容,如果你恰好感兴趣请关注我的公众号,一起学习一起进步
-
两步实现Log4j记录java控制台输出的系统所有异常信息和自定义记录日志---->非常实用,强烈推荐阅读
2013-01-24 16:53:311,关于日志记录是开发中必...2,配置log4j文件:具体配置表示什么意思就不说了一看就明白 嘿嘿 log4j.rootCategory=DEBUG,stdlog,errorlog log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appe1,关于日志记录是开发中必不可少的知识,现在给大家详细说下如何记录日志信息;原理就不多说了看实际操作
2,配置log4j文件:具体配置表示什么意思就不说了一看就明白 嘿嘿
log4j.rootCategory=DEBUG,stdlog,errorlog
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=ERROR
log4j.appender.stdlog.File=d:/error.log
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} [%c{1}] - %m%n
log4j.appender.stdlog=org.apache.log4j.RollingFileAppender
log4j.appender.stdlog.Threshold=DEBUG,console
log4j.appender.stdlog.File=d:/debug.log
log4j.appender.stdlog.MaxFileSize=1024KB
log4j.appender.stdlog.MaxBackupIndex=3
log4j.appender.stdlog.layout=org.apache.log4j.PatternLayout
log4j.appender.stdlog.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p [%c{1}] - %m%n
log4j.appender.errorlog=org.apache.log4j.RollingFileAppender
log4j.appender.errorlog.Threshold=WARN
log4j.appender.errorlog.File=d:/warn.log
log4j.appender.errorlog.MaxFileSize=1024KB
log4j.appender.errorlog.MaxBackupIndex=3
log4j.appender.errorlog.layout=org.apache.log4j.PatternLayout
log4j.appender.errorlog.layout.ConversionPattern=%d [%c{1}] - %m%n3,具体代码:
Log4JLogger l = new Log4JLogger("log4j.properties"); //初始化日志驱动
l.logDebug("--->dug记录");
l.logError("日志正在记录...");
l.logInfo("消息记录中...");
try {
Log4JLogger ll = null;
ll.logDebug("---");
} catch (Exception e) {
l.logDebug(e, e.fillInStackTrace());
l.logError(e,e.fillInStackTrace());
}4,保存的日志信息:
2013/01/24 16:51:03 ERROR [properties] - 日志正在记录...
2013/01/24 16:51:03 INFO [properties] - 消息记录中...
2013/01/24 16:51:03 DEBUG [properties] - java.lang.NullPointerException
java.lang.NullPointerException
at ddm.DataDriverManager.showSysInfo(DataDriverManager.java:47)
at ddm.DataDriverManager.main(DataDriverManager.java:20)
2013/01/24 16:51:03 ERROR [properties] - java.lang.NullPointerException
java.lang.NullPointerException
at ddm.DataDriverManager.showSysInfo(DataDriverManager.java:48)
at ddm.DataDriverManager.main(DataDriverManager.java:20)5,大功高成! 觉得可以的哥们儿希望给个好评!
6,QQ群: 180258862
-
Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解 (强烈推荐军哥的博客,大家多跟他...
2019-07-07 13:54:12为什么感觉现在CSDN的博客编辑器也有点叛逆呢,总是不听话,看不到鼠标的位置,还有经常粘贴一些外面的文章进来的时候总是很难编辑...只是知道个大概的意思然后知道怎么使用(糊涂的用),现在终于明白了(什么也无法说... -
StackOverflow上87万访问量的问题:什么是“找不到符号”?
2020-02-13 13:08:44为了输出更好的内容,我就必须先输入更多的内容,于是我选择 Stack Overflow 作为学习的第一战线,毕竟很多大牛都在强烈推荐。本篇文章,我们来探讨一下访问量足足有 87+ 万次的问题——什么是“找不到符号”,它是... -
为什么面试官都爱问源码?这几个公众号告诉你!
2020-06-10 11:43:00技术之路就是漫长的打怪升级,不断学习前人的踩坑经验才能提升自己,切忌闭门造车。所谓独乐乐不如众乐乐,强烈推荐以下公众号,让你的生活多点意思????,希望小伙伴们能在 coding 的路上... -
idea 找不到符号_StackOverflow上87万访问量的问题:什么是“找不到符号”?
2021-01-30 22:06:53为了输出更好的内容,我就必须先输入更多的内容,于是我选择 Stack Overflow 作为学习的第一战线,毕竟很多大牛都在强烈推荐。本篇文章,我们来探讨一下访问量足足有 87+ 万次的问题——什么是“找不到符号”,它是... -
annotationprocessor 提示找不到类_StackOverflow上87万访问量的问题:什么是“找不到符号”?...
2020-12-28 22:46:31为了输出更好的内容,我就必须先输入更多的内容,于是我选择 Stack Overflow 作为学习的第一战线,毕竟很多大牛都在强烈推荐。本篇文章,我们来探讨一下访问量足足有 87+ 万次的问题——什么是“找不到符号”,它是... -
[Python3]爬虫入门之正则表达式
2017-10-25 18:42:06强烈推荐https://regexr.com/该网站。 使用该网站,查看表达式每一项是什么意思。很快就可以掌握正则了!!!从来没觉得正则是如此的简单! 好了。 -
学习linux的好助手-linux命令解释工具
2019-06-05 10:39:35可能英文不是很方便,那就使用下面的中文版的快速查找 Linux 命令行命令,简直是好用的不行,必须强烈推荐,不仅仅是简单的告诉什么作用,还提供了学习教程,作为学习的教程是极好的。 Linu... -
UML——四种关系
2015-09-19 19:54:34强烈推荐一个大神的人工智能的教程:...他们又是什么意思呢?他们之间的区别是什么呢?我们一起来探讨一下吧! 【四种关系】 1.关联关系(Association) 关联关系是一种结构化的关系,... -
多媒体和图像处理学习建议
2021-01-17 10:59:06绝对不是念ppt,老师充分考虑到的你的数学功底很烂,从头到尾,用最简单的方式给你推导了一遍公式,垃圾如我,都能学会,强烈推荐。 平常上课,听听挺有意思的,一定要提前把老师的ppt打印下来,边听,边做标记,边... -
UML——类图(二)
2015-10-23 16:56:26最近在学习设计模式,设计模式共23个,现在还是小菜鸟的我看了那些代码根本不懂是什么意思,还好,每个设计模式都对应着相应的类图,啊哈,看了图之后再去理解设计模式是解决什么问题的果然简单了很多,类图是UML图... -
欢迎使用CSDN-markdown编辑器
2017-08-06 22:20:13内容大纲先上一个思维导图^_^,顺便推荐一个在线画图的好工具(Process On),有兴趣的可以试下,非常好用,强烈推荐! 下面让我们细细研究各个条目的内涵。第1条:考虑用静态工厂方法代替构造器 优势1:静态工厂... -
Groovy中那些神奇注解之Memoized
2017-03-13 17:33:58PS:强烈推荐Groovyr官方文档,相当的详细,地址:http://www.groovy-lang.org/documentation.html,不用担心是英文,有点代码经验的,一看示例代码就知道是什么意思了。好了,闲话少说,第一个注解:... -
宏定义中的#,##和C++中的虚函数表问题
2019-08-01 23:50:05前几天,有个同学问我宏定义中的#和##都是什么意思啊,说实话,我也不知道,不知道怎么办,google啊!说实话,自己过去对宏定义还真没有深入了解,只会使用最简单的宏定义,自从学了C++之后,基本上都不用宏定义了,... -
八月英语——近朱者赤
2016-08-27 21:46:15这个月接触了新的学习材料,小猪佩琪,这个材料看了三部了,虽然是动画,但是每一集都有新的东西,有的句子比较简单,很容易引起共鸣,有的词语之前是没有接触过的,但是根据画面也就可以猜出是什么意思。... -
工厂模式
2013-09-04 18:09:29以前总是听老师讲工厂模式,当时不理解什么意思。今天早晨突然心血来潮,想研究一下工厂模式。发现一个不错的博文:[url]http://www.cnblogs.com/poissonnotes/archive/2010/12/01/1893871.html[/url]强烈推荐!!!... -
【吴恩达深度学习】Word Embedding 理解
2020-09-01 16:55:35最近在学习吴恩达老师的深度学习–NLP部分课程时,对里面提到的Word Embedding 让我特别费解,完全不能明白是什么意思,经过这几天查阅大佬们的博客,今天终于搞明白是啥意思了,大佬们写的东西都非常好,非常全面,... -
事务在触发器中结束。批处理已中止。_Streaming 102: 批处理之上的世界(二)(上)...
2020-12-05 19:55:38如果没有的话强烈推荐一看。它为本文奠定了基础,下面我将假设你已经看过上篇文章。注:本文中含有大量动画,如果打印的话将会错过很多精彩内容。闲话少说,下面进入主题。先总结下,上次的内容主要分三块:术语,... -
2016.7.12 做题汇总! 打卡!
2016-07-13 01:52:28poj 1386什么意思。。自行百度一下吧。是个欧拉路经典题。首先,我们把单词首尾建边。 这样就会出现一个图,而这个图必须联通的。这里我们就可以用并查集看是否联通,也可以用 dfs但是强烈 推荐并查集 因为 dfs不好... -
4-Displaying Images with Android
2013-01-11 11:10:09在开始实际的游戏循环之前,让我们先显示一些图片,使得我们能够得到一些尺寸的概念(不太清楚这句什么意思)。如果还没有看到线程更新屏幕的内容,强烈推荐先看一下(上篇博客) 在android上面显示图片非常的简单 ... -
东邪西毒>>终极版经典台词
2009-03-23 14:09:29记得上大学时有一个同学就向我强烈推荐看等王家卫的电影!当时第一次看的时候,愣是没看明白。看完脑子里只有四个字:什么东西?几年后,才知道原来大多数人第一遍都没看懂(包括林青霞拍完她也没明白这部电影什么... -
命令模式、template method模式、工厂方法模式的比较
2010-11-17 22:48:00强烈推荐GOF的《设计模式》,不用看什么j2ee设计模式。GOF的书的确经典。看过之后,精神爽,身体棒,吃嘛嘛香! 命令模式的类图,网上到处都有! 一般包括:client,invoker,Command接口,具体的command实现,... -
重提“不要看《深入浅出mfc》!”一文
2004-08-30 11:54:00首先就是为什么起这个名字,因为这是我当时看这本书时最大的感觉,是一种发自心里的想喊出来的感觉,那个时候我初次接触vc,当然对mfc更是一无所知,一直听说这是一本非常好的书,很多人都是强烈推荐,而且我也... -
你必须知道的495个C语言问题.pdf
2013-01-20 14:30:54“本书清晰地阐明了Kernighan与Ritchie的The C Programming Language一书中许多简略的地方,而且精彩地总结了C语言编程实践,强烈推荐!” ——Yechiel M.Kimchi,以色列理工学院 目录: 第1章 声明和... -
[你必须知道的495个C语言问题]人民邮电出版社.扫描版.pdf
2011-10-01 21:39:52“本书清晰地阐明了Kernighan与Ritchie的The C Programming Language一书中许多简略的地方,而且精彩地总结了C语言编程实践,强烈推荐!” ——Yechiel M.Kimchi,以色列理工学院 目录: 第1章 声明和...
-
使用容器的正确方式,Docker在雪球的技术实践
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
程序员必修基础套餐课
-
龙芯生态应用开发基础:C语言精要
-
illustrator软件Mac电脑入门学习必备
-
Springboot进行前后端数据传递格式json字符串的简单理解
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
全光子晶体光纤单级直接放大产生34 W高功率飞秒脉冲
-
APPKIT打造稳定、灵活、高效的运营配置平台
-
2021-02-25
-
量子差分密码分析
-
《让心灵洒满阳光》读后感
-
微博时间格式转换
-
安卓Android全局变量
-
使用 Linux 平台充当 Router 路由器
-
e_timer_Timer和TimerTask_20210225
-
2009年上半年 信息系统监理师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
leetcode算法第三题
-
深究字符编码的奥秘,与乱码说再见
-
FTP 文件传输服务