正则表达式总结

发布时间 2023-11-11 12:06:07作者: juna3066

正则表达式总结

正则表达式在线测试https://c.runoob.com/front-end/854/

image

1.通用概念

是什么?
正则表达式是编程语言中的 通用模式配置 语法
不同编程语言,使用大同小异。
英语:regex,grep

通用概念
1.普通字符
2.特殊字符(元字符)
	特殊含义的字符
	. 表示任意字符,除了换行符
	^ 表示以什么开头
	$ 表示以什么结尾
	| 或者
	* >=0
	?0,1
	+ >=1
3.转移字符(\)
4.[]表示one,
	[abc]
	[^abc] 表示不是abc中的任意字符。
	[a-z]
5.()表示group,捕获组
6.量词
	*
	?
	+
	{m}
	{m,}
	{m,n}
7.预定义字符
	特殊含义的字符
	\d 表示数字0-9 理解为digital
	\w 表示字符[a-zA-Z0-9_] 理解为word
	\s 表示空白字符,包括空格,tab换行 理解为space
	\D 表示非\d
	\W 表示非\w
	\S 表示非\s
8.修饰符
	g 表示全局匹配,理解为global
	i 表示忽略大小写匹配,理解为ignore或insensitive(不敏感)=
	m 表示行匹配,通常和^&结合使用,
		加了m修饰符,相比之前每一个都进行匹配,匹配到多个结果(换行的字符串)	
		不加m修饰符,最多只能搜一个结果(换行的字符串)	

2.正则表达式使用

1.Java中使用

java.util.regex包,提供正则表达式支持

//模式 编译regex表达式
Pattern.compile("表达式",修饰符) //修饰符可选
//匹配
Matcher.match("要匹配的字符串")

例子:
1.匹配数组,输出
2.匹配字符串,替换
3.分割字符串

2.JS中使用

let regex = new RegExp('表达式')
let regex = /表达式/

常用方法
regex.test(要匹配的字符串) 返回boolean值
regex.exec(要匹配的字符串) 返回匹配结果,通常数组

3.Nginx配置中使用

用于location块的路径匹配

location ~  ^/api/ { ... }  ~表示用正则表达式匹配,^表示以/api/开头进行匹配
location ~* ^/api/ { ... }  *表示匹配忽略大小写
location ~* \.(jpg|png)$ { ... } $表示匹配以什么结尾。
	用正则表达式,忽略大小写匹配路径,匹配.jpg或.png文件

4.centos中使用

grep 文本搜索工具
grep 'pattern' filename  匹配包含字符串的行
grep -E 'pattern' filename 用正则表达式,匹配包含字符串的行
grep -c 'pattern' filename 统计匹配行的数量

sed 流编辑工具
sed 's/pattern/replacement/' 正则表达式匹配到的内容,替换掉

awk 文本处理工具
awk '{ if ($1 ~ /pattern/) print $2 }' filename

shell脚本中

#!/bin/bash
if [[ "example" =~ ^ex ]]; then
    echo "String starts with 'ex'"
fi

;命令分割符,表示对if和then分割,便于查看。可使用换行替代。
[[ ]] 和 =~ 运算符一起使用,进行正则表达式匹配。

扩展补充:

awk用法

awk是文本处理工具


基本语法
awk 'pattern { action }' filename
pattern: 是一个正则表达式
{ action }: 是一个动作块,表示当 pattern 匹配到时要执行的动作。

内置变量
$0 表示整行
$1,$2,$3... 表示第几个字段(通常是通过空格或制表符分隔的文本)
NF 【当前行】的字段数 !
NR 【当前行】的行号


入门demo:
1.条件过滤,打印匹配到的行
	awk '/info/ { print $0}' filename 
2.打印整行
	awk '{print $0 }'
3.打印某些列
	awk '{print $1,$2}'
4.计算总和
	awk '{ sum += $1} end { print sum}' filename
5.格式化输出
	awk '{ printf "Name: %-10s Score: %d\n", $1, $2 }' filename

6.自定义分隔符:
	awk -F':' '{ print $1, $3 }' OFS='\t' /etc/passwd
		输入分割设置为:,输出分割符号设置为\t 

7.模式范围:
	awk '/start/,/end/ {print $0}' 
		打印【从】包含 "start" 的行【到】包含 "end" 的行的【内容】

格式化输出

格式化输出,用于展示数据

通用的格式化输出规则
1.对齐
	- 表示左对齐
	+ 表示右对齐 默认
	0 表示居中对其

2.宽度
	表示输出字符个数(或理解为宽度)

2.精度(针对浮点数)
	控制浮点数小数点个数,比如.2f

3.类型
	s 字符串
	d 整数
	f 浮点数

个人理解
%对齐宽度精度类型 + 其他,比如\t
%表示格式化输出开始

%+10s
%+10d
%+10.2f
+是默认对其方式,可以省略

java中例子
		String name = "John";
        int age = 25;
        double height = 1.75;
        System.out.printf("Name: %-10s Age: %3d Height: %.2f\n", name, age, height);

shell脚本例子

	#!/bin/bash
	name="John"
	age=25
	height=1.75
	printf "Name: %-10s Age: %3d Height: %.2f\n" "$name" "$age" "$height"