正则表达式基本使用

基础 1.1 字符匹配 字符 说明 \ 转义符 \d [0-9]。表示是一位数字。 \D [^0-9]。表示除数字外的任意字符。 \w [0-9a-zA-Z_]。表示数字、大小写字母和下划线。 \W [^0-9a-za-z_]。非单词字符。 \s [\t\v\n\r\f]。表示空白符,包括空格、水平制表符、 垂直制表符、换行符、回车符、换页符。 \S [^\t\v\n\r\f]。非空白符。 . [^\n\r\u2028\u2029]。通配符,表示几乎任意字符。 换行符、回车符、行分隔符和段分隔符除外。 \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。 \f 匹配一个换页符 (U+000C)。 \n 匹配一个换行符 (U+000A)。 \r 匹配一个回车符 (U+000D)。 \t 匹配一个水平制表符 (U+0009)。 \v 匹配一个垂直制表符 (U+000B)。 \0 匹配 NULL(U+0000)字符, 不要在这后面跟其它小数,因为 \0 是一个 八进制转义序列。 [\b] 匹配一个退格(U+0008)。(不要和\b 混淆了。) [abc] any of a, b, or c [^abc] not a, b, or c [a-g] character between a & g 1.2 位置匹配 字符 说明 \b 是单词边界,具体就是\w 和\W 之间的位置,也包括\w 和 ^ 之间的位置, 也包括\w 和 之间的位置。 \B 是\b 的反面的意思,非单词边界。例如在字符串中所有位置中,扣掉\b, 剩下的都是\B 的。 ^abc$ 字符串开始、结束的位置 1.3 组 字符 说明 (abc) capture group,捕获组 \n backreference to group #n,分组引用,引用第 n 个捕获组匹配的内容, 其中 n 是正整数 (?:abc) non-capturing group,非捕获组 1.4 先行断言 字符 说明 a(?=b) positive lookahead,先行断言,a 只有在 b 前面才匹配 a(?!b) negative lookahead,先行否定断言,a 只有不在 b 前面才匹配 1.5 后行断言 字符 说明 (?<=b)a positive lookbehind,后行断言,a 只有在 b 后面才匹配 (?<!b)a negative lookbehind,后行否定断言,a 只有不在 b 后面才匹配 1.6 量词和分支 字符 说明 a* 0 or more a+ 1 or more a? 0 or 1 a{5} exactly five a{2,} two or more a{1,3} between one & three a+? a{2,}? match as few as possible,惰性匹配,就是尽可能少的匹配 以下都是惰性匹配: {m,n}? {m,}? ?? +? *? ...

2020-10-11 · 11 分钟 · 5265 字 · Niuhe

编程工具之Git

Git版本控制 尽管 Git 的接口有些丑陋,但是它的底层设计和思想却是非常优雅的。丑陋的接口只能靠死记硬背,而优雅的底层设计则非常容易被人理解。因此,我们将通过一种自底向上的方式像您介绍 Git。我们会从数据模型开始,最后再学习它的接口。一旦您搞懂了 Git 的数据模型,再学习其接口并理解这些接口是如何操作数据模型的就非常容易了。 ...

2020-09-27 · 8 分钟 · 3786 字 · Niuhe

编程工具之Vim

Vim编辑器 编辑模式 Vim的设计以大多数时间都花在阅读、浏览和进行少量编辑改动为基础,因此它具有多种操作模式: 正常模式:在文件中四处移动光标进行修改 插入模式:插入文本 替换模式:替换文本 可视化(一般,行,块)模式:选中文本块 命令模式:用于执行命令 在不同的操作模式下, 键盘敲击的含义也不同。比如,x 在插入模式会插入字母x,但是在正常模式 会删除当前光标所在下的字母,在可视模式下则会删除选中文块。 ...

2020-09-27 · 6 分钟 · 2771 字 · Niuhe

编程工具之问答

最后一节课,我们回答学生提出的问题: 学习操作系统相关内容的推荐,比如进程,虚拟内存,中断,内存管理等 你会优先学习的工具有那些? 使用 Python VS Bash脚本 VS 其他语言? source script.sh 和 ./script.sh 有什么区别? 各种软件包和工具存储在哪里?引用过程是怎样的? /bin 或 /lib 是什么? 我应该用 apt-get install 还是 pip install 去下载软件包呢? 用于提高代码性能,简单好用的性能分析工具有哪些? 你使用那些浏览器插件? 有哪些有用的数据整理工具? Docker和虚拟机有什么区别? 不同操作系统的优缺点是什么,我们如何选择(比如选择最适用于我们需求的Linux发行版)? 使用 Vim 编辑器 VS Emacs 编辑器? 机器学习应用的提示或技巧? 还有更多的 Vim 小窍门吗? 2FA是什么,为什么我需要使用它? 对于不同的 Web 浏览器有什么评价? 参考 学习操作系统相关内容的推荐,比如进程,虚拟内存,中断,内存管理等 首先,不清楚你是不是真的需要了解这些更底层的话题。 当你开始编写更加底层的代码,比如实现或修改内核的时候,这些内容是很重要的。除了其他课程中简要介绍过的进程和信号量之外,大部分话题都不相关。 ...

2020-09-27 · 13 分钟 · 6349 字 · Niuhe

编程工具之杂烩

安全和密码 熵(Entropy) 度量了不确定性并可以用来决定密码的强度。 熵的单位是 比特。对于一个均匀分布的随机离散变量,熵等于log_2(所有可能的个数,即n)。 扔一次硬币的熵是1比特。掷一次(六面)骰子的熵大约为2.58比特。 对称加密与非对称加密 当你运行ssh-keygen命令,它会生成一个非对称密钥对:公钥和私钥(public_key, private_key)。 生成过程中使用的随机数由系统提供的熵决定。这些熵可以来源于硬件事件(hardware events)等。 公钥最终会被分发,它可以直接明文存储。 但是为了防止泄露,私钥必须加密存储。ssh-keygen命令会提示用户输入一个密码,并将它输入密钥生成函数 产生一个密钥。最终,ssh-keygen使用对称加密算法和这个密钥加密私钥。 ...

2020-09-27 · 16 分钟 · 7784 字 · Niuhe

编程工具之调试和性能分析

代码不能完全按照您的想法运行,它只能完全按照您的写法运行,这是编程界的一条金科玉律。 让您的写法符合您的想法是非常困难的。在这节课中,我们会传授给您一些非常有用技术,帮您处理代码中的 bug 和程序性能问题。 调试代码 打印调试法与日志 “最有效的 debug 工具就是细致的分析,配合恰当位置的打印语句” — Brian Kernighan, Unix 新手入门。 ...

2020-09-27 · 16 分钟 · 7736 字 · Niuhe

Virtualbox虚拟机连接雷达和UART串口

目前ROS只支持Linux版,如果不方便装Linux主机,可以通过以太网桥接的方式获得雷达的数据帧;对一些串口传感器,也可以通过Serial to USB,然后在virtualbox里选择对应的USB设备进行调试。 本方法适用于通过以太网/WLAN来传送数据包的雷达。 使用Virtualbox里建立虚拟机,将雷达连接到主机电脑, 设置以太网的IP地址为雷达的目标地址 虚拟机桥接到对应的以太网 在虚拟机中测试收发数据帧 tcpdump

2019-05-06 · 1 分钟 · 203 字 · Niuhe