正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
会者不难,大多数文本编辑器都有搜索替换的功能,其中又有很大一部分支持正则表达式
经常用来匹配删除/替换一些文本
不过后来有了一个需求,就是我需要匹配https://haoduck.com/?p=[数字]替换为https://haoduck.com/[数字].html
正文
正则表达式中\d表示数字,\d+表示一个或多个连着的数字
表达式为:https://haoduck.com/\?p=\d+,这样可以匹配到所有https://haoduck.com/?p=[数字],此处“?”前的\为转义符,表示匹配字符串?,而非正则中的特殊字符,不过这里加不加转义都不影响匹配
那么我们怎么将要匹配的\d+保持不会,而更改其他部分呢
使用一对小括号( ),表示标记一个子表达式的开始和结束位置,可以供以后使用
那么表达式就变为https://haoduck.com/\?p=(\d+)
后面,需要使用标记好的(\d+)就可以使用$1来引用,和Shell脚本传入参数差不多,标记了多个要匹配的子表达式依次使用$1$2$3$4等等来引用
那么要匹配的表达式就是https://haoduck.com/\?p=(\d+),替换部分字符的表达式为https://haoduck.com/$1.html
效果为
https://haoduck.com/?p=123 ==》 https://haoduck.com/123.html
https://haoduck.com/?p=456 ==》 https://haoduck.com/456.html
后言
无