岁月如歌


  • 首页

  • 归档

  • 分类

  • 标签

  • Android

  • Python

  • Notes

  • Links

  • 关于

  • 搜索
close
常用代码和知识点速查

adb 命令

给单个目录添加读写权限

adb shell su -c "chmod 777 /data"

给目录下所有文件和子目录加读写权限

adb shell su -c "chmod 777 /data/data/com.example.test/*"

Read More:Android真机调试时DDMS无法查看/data目录


七牛图片处理

限定长边,生成不超过500x500的缩略图,在网址后加:

?imageMogr2/thumbnail/500x500

命令行

简易Web服务:

cd 进入指定文件夹,执行

python -m http.server 8000

其他电脑用浏览器打开本机IP:8000即可当FTP使用

强制删除文件夹

可用help 命令名查询相关帮助

rd /s /q 路径\文件夹名

强制删除文件

del /f /a /q 路径\文件名

Hexo博客之NexT主题

独立居中的引用

带上下分割线的引用,引用内文本将自动居中。代码如下,三选一。效果见本文开头,「常用代码和知识点速查」这几个字。

1
2
3
4
5
6
7
8
<!-- HTML -->
<blockquote class="blockquote-center">blah blah blah</blockquote>

<!-- Built-in tag (Require NexT 0.4.5 or above) -->
{% centerquote %}blah blah blah{% endcenterquote %}

<!-- 别名 -->
{% cq %} blah blah blah {% endcq %}

突破容器限制宽度的图片

图片将自动扩展 26%,突破文章宽度。

代码三选一:

1
2
3
4
5
6
7
8
<!-- HTML -->
<img src="/image-url" class="full-image" />

<!-- Built-in tag (Require NexT 0.4.5 or above) -->
{% fullimage /image-url, alt, title %}

<!-- 别名 -->
{% fi /image-url, alt, title %}


VBA代码块

  • 自己写的实用VBA代码合集

正则表达式

技术文章

  • 使用正则表达式找出不包含特定字符串的条目

正则表达式工具

Expresso
RegexBuddy

正则表达式知识

字符 解释
x 字符x(x可代表任何合法的字符)
\0mnn 八进制数0mnn所表示的字符
\xhh 十六进制值0xhh所表示的字符
\uhhhh 十六进制值0xhhhh所表示的UNICODE字符
\t 制表符(‘\u0009’)
\n 新行(换行)符(‘\u000A’)
\r 回车符(‘\u000D’)
\f 换页符(‘\u000C’)
\a 报警(bell)符(‘\u0007’)
\e Escape符(‘\u001B’)
\cx x对应的控制符。例如\cM匹配Ctrl-M。x值必须为A~Z或a~z之一
特殊字符解释
$匹配一行的结尾
^匹配一行的开头
()标记子表达式的开始和结束位置
[]用于确定中括号表达式的开始和结束位置
{}用于标记前面子表达式的出现频度
*指定前面子表达式可以出现零次或多次
+指定前面子表达式可以出现一次或多次
?指定前面子表达式可以出现零次或一次
.匹配除换行符\n之外的任何单字符
\用于转义下一个字符,或指定八进制、十六进制字符
|指定两项之间任选一项
预定义字符,即通配符 说明
. 可以匹配任何字符
\d 匹配0-9的所有数字
\D 匹配非数字
\s 匹配所有的空白字符,包括空格、制表、回车、换页、换行
\S 匹配所有的非空白字符
\w 匹配所有的单词字符,包括0-9、26个英文字母和下划线
\W 匹配所有的非单词字符
方括号表达式 说明
表示枚举 如[abc]表示abc中任意一字符
表示范围:- 如[a-f]表示a~f范围内任意字符
表示求否:^ 如[^abc]表示非abc的任意字符
表示“与”运算:&& 如[a-z&&[^bc]]表示a-z范围内除bc外的所有字符
表示“并”运算 如[a-d[m-p]]表示[a-dm-p]
边界匹配符 说明
^ 行的开头
$ 行的结尾
\b 单词的边界
\B 非单词的边界
\A 输入的开头
\G 前一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符
\z 输入的结尾
  • Greedy(贪婪模式):数量表示符默认采用贪婪模式,表达式会一直匹配下去,直到无法匹配为止
  • Reluctant(勉强模式):用问号后缀表示,只会匹配最少的字符,也称最小匹配模式
  • Possessive(占有模式):用加号后缀表示,目前只有Java支持占有模式,固定从字符串第一个字母开始贪婪匹配。
贪婪模式 勉强模式 占有模式 说明
X? X?? X?+ X表达式出现零次或一次
X* X*? X*+ X表达式出现零次或多次
X+ X+? X++ X表达式出现一次或多次
X{n} X{n}? X{n}+ X表达式出现n次
X{n,} X{n,}? X{n,}+ X表达式最少出现n次
X{n,m} X{n,m}? X{n,m}+ X表达式最少出现n次,最多出现m次

捕获组

字符 描述 示例
(pattern) 匹配pattern并捕获结果,自动设置组号。 (abc)+d匹配abcd或者abcabcd
(?<name>pattern)或(?'name'pattern) 匹配pattern并捕获结果,设置name为组名。
\num 对捕获组的反向引用。其中 num 是一个正整数。 (\w)(\w)\2\1匹配abba
\k<name>或\k'name' 对命名捕获组的反向引用。其中 name 是捕获组名。 (?<group>\w)abc\k<group>匹配xabcx

非捕获组

字符描述示例
(?:pattern)匹配pattern,但不捕获匹配结果。industr(?:y|ies)
匹配 “industry”或 “industries”
(?=pattern)零宽度正向预查,不捕获匹配结果。Windows(?=95|98|NT|2000)
匹配 “Windows2000” 中的 “Windows”
不匹配 “Windows3.1” 中的 “Windows”
(?!pattern)零宽度负向预查,不捕获匹配结果Windows(?!95|98|NT|2000)
匹配 “Windows3.1”中的 “Windows”
不匹配 “Windows2000”中的 “Windows”
(?<=pattern)零宽度正向回查,不捕获匹配结果。2000(?<=Office|Word|Excel)
匹配 “Office2000” 中的 “2000”
不匹配 “Windows2000”中的 “2000”
(?<!pattern)零宽度负向回查,不捕获匹配结果。2000(?<!Office|Word|Excel)
匹配 “Windows2000”中的 “2000”
不匹配 “Office2000”中的 “2000”

注释

字符描述示例
(?#comment)comment是注释,不对正则表达式的处理产生任何影响2[0-4]\d(?#200-249)|250-5|1?\d\d?(?#0-199)
匹配0-255的整数

正则式之python篇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 切分字符串
re.split(r'[\s\,\;]+', 'a,b;; c d') # ['a', 'b', 'c', 'd']

# match 匹配成功则返回第一个成功的匹配,否则返回None。从字符串开头开始匹配
re.match(r'\d{3}\-\d{3,8}', '010-12345')
re.match(r'\d{3}\-\d{3,8}', '-010-12345') # None

# search 与match差不多。唯一的区别是search扫描整个字符串并返回第一个成功的匹配。
re.search(r'\d{3}\-\d{3,8}', '-010-12345')

# match + 分组,如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
m.group(0) # 永远是匹配的整个字符串,此处为:'010-12345'
m.group(1) # '010'
m.group(2) # '12345'
m.groups() # ('010', '12345')

# 预编译正则表达式
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
re_telephone.match('010-12345').groups() # ('010', '12345')

# 替换
phone = "2004-959-559 # This is Phone Number"
re.sub(r'#.*$', "", phone) # '2004-959-559 '
re.sub(r'\D', "", phone) # '2004959559'

# 找出所有匹配的对象。有捕获组时仅返回捕获组
re.findall(r"\d+","12a32bc43jf3") # ['12', '32', '43', '3']
re.findall(r"\d([a-z]+?)\d","12a32bc43jf3") # ['a', 'bc', 'jf']
re.findall(r"\d([a-z]+?)\d+([a-z]+?)","12a32bc43jf3adc23") # [('a', 'b'), ('jf', 'a')]

# 找出所有匹配的对象。返回迭代器。
re.finditer(r"\d+","12a32bc43jf3")

# 清空缓存中的正则表达式
re.purge()

编译标志参数

编译标志让你可以修改正则表达式的一些运行方式。在 re 模块中标志可以使用两个名字,一个是全名如 IGNORECASE,一个是缩写,一字母形式如 I。(如果你熟悉 Perl 的模式修改,一字母形式使用同样的字母;例如 re.VERBOSE的缩写形式是 re.X。)多个标志可以通过按位 OR-ing 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:

  • I –> IGNORECASE
    使匹配对大小写不敏感;字符类和字符串匹配字母时忽略大小写。举个例子,[A-Z]也可以匹配小写字母,Spam 可以匹配 “Spam”, “spam”, 或 “spAM”。这个小写字母并不考虑当前位置。
  • L –> LOCALE
    影响 “w, “W, “b, 和 “B,这取决于当前的本地化设置。
    locales 是 C 语言库中的一项功能,是用来为需要考虑不同语言的编程提供帮助的。举个例子,如果你正在处理法文文本,你想用 “w+ 来匹配文字,但 “w 只匹配字符类 [A-Za-z];它并不能匹配 “é” 或 “?”。如果你的系统配置适当且本地化设置为法语,那么内部的 C 函数将告诉程序 “é” 也应该被认为是一个字母。当在编译正则表达式时使用 LOCALE 标志会得到用这些 C 函数来处理 “w 後的编译对象;这会更慢,但也会象你希望的那样可以用 “w+ 来匹配法文文本。
  • M –> MULTILINE
    使用 “^” 只匹配字符串的开始,而 $ 则只匹配字符串的结尾和直接在换行前(如果有的话)的字符串结尾。当本标志指定後, “^” 匹配字符串的开始和字符串中每行的开始。同样的, $ 元字符匹配字符串结尾和字符串中每行的结尾(直接在每个换行之前)。
  • S –> DOTALL
    使 “.” 特殊字符完全匹配任何字符,包括换行;没有这个标志, “.” 匹配除了换行外的任何字符。
  • X –> VERBOSE
    该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之後;这可以让你更清晰地组织和缩进 RE。它也可以允许你将注释写入 RE,这些注释会被引擎忽略;注释用 “#”号 来标识,不过该符号不能在字符串或反斜杠之後。

正则式之Java篇

Pattern是一个正则表达式编译后在内存中的表现形式,是不可变类,可供多个并发线程安全使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.regex.Pattern

//将一个字符串编译成Pattern对象
Pattern p = Pattern.compile("a*b");

//使用Pattern对象创建Matcher对象,可多次使用
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

// 仅使用一次的快捷方法
boolean b = Pattern.matches("a*b", "aaaaab");


//创建一个Pattern对象,并用它建立一个Matcher对象
Matcher m = Pattern.compile("\\w+").matcher("Java is very easy!");
while(m.find()){
System.out.println(m.group());
}

int i = 0;
//find()方法可以传入一个int类型的参数,从该int索引处向下搜索
while(m.find(i)){
System.out.print(m.group() + "\t");
i++;
}

//start()和end()方法主要用于确定子串在目标字符串中的位置
while(m.find()){
System.out.println(m.group() + "子串的起始位置:"
+ m.start() + ",其结束位置" + m.end());
}

//reset()将现有的Matcher对象应用于新的字符序列
Pattern p = Pattern.compile("\\w+");
Matcher m = Pattern.matcher("King");
m.reset("Yes");

String类与正则式相关的方法

boolean matches(String regex):是否匹配
String replaceAll(String regex, String replacement):全部替换
String replaceFirst(String regex, String replacement):替换第一个匹配结果
String[] split(String regex):用regex分割字符串
  • 文章目录
  • 站点概览
loveNight

loveNight

自古求真皆寂寞,唯挑心灯伴夜霭

46 日志
24 分类
68 标签
RSS
Github Weibo Email SegmentFault Zhihu
友情链接
  • 我的CSDN博客
  • 我的新浪博客
  • 腾讯分析
  1. 1. adb 命令
    1. 1.1. 给单个目录添加读写权限
    2. 1.2. 给目录下所有文件和子目录加读写权限
  2. 2. 七牛图片处理
  3. 3. 命令行
    1. 3.1. 简易Web服务:
    2. 3.2. 强制删除文件夹
    3. 3.3. 强制删除文件
  4. 4. Hexo博客之NexT主题
    1. 4.1. 独立居中的引用
    2. 4.2. 突破容器限制宽度的图片
  5. 5. VBA代码块
  6. 6. 正则表达式
    1. 6.1. 技术文章
    2. 6.2. 正则表达式工具
    3. 6.3. 正则表达式知识
    4. 6.4. 捕获组
    5. 6.5. 非捕获组
    6. 6.6. 注释
    7. 6.7. 正则式之python篇
    8. 6.8. 正则式之Java篇
© 2015 - 2017 loveNight   |  Google网站地图   |  百度网站地图
powered by Hexo
主题 - NexT.Pisces
  |  本站总点击 次   |  您是第 位访客