正则表达式的几个例子

496 阅读2分钟

终端的几个命令

在文件中搜索字符:

grep + 字符 + 文件名

在文件中搜索到字符后,向下显示3行(向上显示3行是-B)

grep + 字符 + 文件名 -A 3

grep默认是大小写敏感,如果不想区分大小写,后面加上-i

grep + 字符 + 文件名 -A 3 -i

搜索除了某字符之外的所有字符:加上-v(反转的意思):

grep -v + 字符 + 文件名 -A 3 -i

只搜索字符后面带s的字符

grep + 字符 + [s] + 文件名

只搜索字符后面不带s的字符

grep + 字符 + [^s] + 文件名

通过正则去搜索文件中的内容:

grep + 正则表达式 + 文件名

启用扩展正则表达式:

grep + -E + 正则表达式  + 文件名

echo "字符" | grep "正则表达式"

他会用正则去匹配前面的字符,匹配到了才输出

搜索带字符的一行:可以用锚点操作符

练习题一:

假定egrep '(fooq|foo)*(qbarquux|bar)'分析的字符串是:

A.fooqbarquux B.fooqbar C.以上都选

答案:C

  • (fooq|foo):分组操作符,可以是fooq也可以是foo开头
  • * :重复操作符,可以0次或者多次
  • (qbarquux|bar):分组操作符,可以是qbarquux或者bar结尾

假定egrep ‘((a*)b)*\1\2'分析的字符串是

A.aabababa B.aabaabaabaabaa C.以上都不选

答案:B

-a*):a可以重复一次或者多次
-a*)b:代表a可以多个,但是b只有一个
- ((a*)b)* :代表小括号里面的可以多个
- 如果分组不止一次匹配(例如后面跟着重复运算符,也就是\*),则向后引用将匹配分组最后匹配的字符串,所以"\1" = aa ,"\2" = 空

假定egrep ‘(one(x)|two(y))-and-(three\2|four\3)’分析的字符串是

A.onex-and-threex B.twoy-and-foury C.onex-and-four D.twoy-and-threey E.twoy-and-threex F.以上都不对

答案:AB

- (one(x)|two(y)):组1
-x):组2
-y):组3
- A:前面匹配了1次,所以x=x,\2=x,所以A正确
- B:前面匹配了2次,所以y=y,\3=y,所以B正确

匹配字符串“license: "creativecommons.org/licenses/by…

答案:

- 完全版: (license)[:](\s*)["":./,\-%A-Za-z0-9]\*
	- license开头,后面跟着:,然后重复0-n个空格,再包含的各种字符的n个循环
- 简洁版: (license)(.*)
	- (.*):匹配除了换行符之外的所有字符

对指定库中的符合指定的正则表达式的函数下断点

(lldb) breakpoint set —func-regex=.—shlib=libfoo.dylib

对符合指定的正则表达式的符号(也就是函数名)下断点

(lldb) breakpoint set --func-regex regular-expression

通过对指定的正则表达式对⽂件内容设置断点

(lldb) breakpoint set --source-pattern-regexp regular-expression --file