正则表达式

一. 特殊符号的含义
  1. 量词

    • *:表示前面的模式零次或多次
    • +:表示前面的模式一次或多次
    • ?:表示前面的模式零次或一次
    • {n}:表示前面的模式恰好 n 次
    • {n,}:表示前面的模式至少 n 次
    • {n,m}:表示前面的模式至少 n 次且不超过 m 次
  2. 分组和捕获

    • ( ):用于分组和捕获子表达式
    • (?: ):用于分组但不捕获子表达式
  3. 特殊字符

    • \:转义字符,用于表示特殊字符本身
    • .:表示任意字符(除了换行符\r\n)
    • |:用于指定多个模式的选择
  4. 锚点

    • ^表示字串开头
    • $表示字串结尾
    • \b表示一个单词的边界,即字与空格间的位置
    • \B表示非单词的边界
  5. 字符类

    • [ ]:表示括号内的任意一个字符。例如,`[abc]`` 表示字符 "a"、"b" 或 "c"
    • [^ ]:表示除了括号内的字符以外的任意一个字符。例如,[^abc] 表示除了字符 "a"、"b" 或 "c" 以外的任意字符
    • \w:表示一个字符,该字符是字母,数字,下划线. 等价于[A-Za-z0-9_]
    • \d:表示一个阿拉伯数字. 等价于[0-9]
    • \D: 匹配一个非数字字符。等价于 [^0-9]
    • \s: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]
    • \S: 匹配任何非空白字符。等价于 [^\f\n\r\t\v]

eg: ^[0-9].*[abc]$ 表示"以数字开头,以a或b或c结尾的字串"
[^aeiou]表示字串中,所有不是aeiou的字符
([1-9])([a-z])

二. 正则表达式可以干什么
  1. 测试字符串是否满足正则表达的某个格式
  2. 替换正则表示到的文本
  3. 从字串中提取正则表示的子字符串
三. 定位查询

前面讲了, ( )用于匹配后捕获字串的. 但如果( )里是以下面这4个符号?=、?!、?<=、?<!开头,则表示以括号内的内容作为定位

  1. exp1(?=exp2): 以 exp2 为定位, 匹配 exp2 前面的 exp1
    runoob(?=[\d]+) : 匹配后面是数字的 runoob

  2. exp1(?!exp2): 匹配 exp1, 但不要在 exp2 之前
    runoob(?![\d]+) : 匹配后面不是数字的 runoob

  3. (?<=exp2)exp1: 匹配 exp2 后面的 exp1
    (?<=[\d]+)runoob: 匹配前面是数字的 runoob

  4. (?<!exp2)exp1: 匹配 exp1, 但不要在 exp2 后面
    (?<![\d]+)runoob: p匹配前面不是数字的 runoob

四. 反向引用

()匹配到的内容,会被正则引擎放到缓冲区中.缓冲区编号从1开始,最大到99.如果想引用前面缓冲区匹配到的内容, 用 \n 表示即可. 比如 \1 表示第一个缓冲区匹配到的内容.反向引用的最简单的、最有用的应用之一,是匹配出文本中两个相同的相邻单词字串.
eg: 匹配 'Is is the cost of of gasoline going up up' 字串中相同的连续字串.

eg: 用这则表达式判断一个数是否是素数

首先, 把整数 n 写成 n 个 1. 比如,数字 13 写成 1111111111111. 则表达式中的1+表示至少一个1,所以11+表示2个以上的1. \1表示(11+)匹配到的串,这样(11+)\1表示能被2整除. 后面加上'+'就能表示能被3以上整除了

五. shell 脚本中的正则

shell 中使用正则匹配, 用 grep -E 匹配. 但 grep 不能很好的支持抓取分组结果. 本想用 sed , 但发现懒惰匹配模式貌似不支持, 改用 perl -pe 获取分组结果.

shell 复制代码
# 取 url 参数在1002,2002,90553 中任意一个,切后面有 oaid 参数的报文
# perl -pe 抓取 oaid 参数值:  \1 取第一个分组
# grep -v '^$' 去掉空行
oaid=`hdfs dfs -text $fileName | grep -E 'url=(1002|2002|90553).*&oaid=(.*?)&.*' | perl -pe 's/.*&oaid=(.*?)&.*/\1/g' | grep -v '^$' | head -1`
echo "oaid: $oaid"
相关推荐
疯狂吧小飞牛15 小时前
正则表达式特殊字符
正则表达式
White graces15 小时前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
astragin15 小时前
正则表达式常用记录
正则表达式
不会玩技术的技术girl18 小时前
使用Python和正则表达式爬取网页中的URL数据
开发语言·python·正则表达式
疯狂吧小飞牛18 小时前
正则表达式–断言
正则表达式
yuanbenshidiaos18 小时前
【正则表达式】
数据库·mysql·正则表达式
奔跑吧邓邓子1 天前
【Python爬虫(12)】正则表达式:Python爬虫的进阶利刃
爬虫·python·正则表达式·进阶·高级
阿华的代码王国2 天前
【从0做项目】Java搜索引擎(6)& 正则表达式鲨疯了&优化正文解析
java·后端·搜索引擎·正则表达式·java项目·从0到1做项目
程序员小王꧔ꦿ2 天前
BeautifulSoup、lxml/XPath和正则表达式在数据爬取中的核心差异及适用场景
正则表达式·beautifulsoup
程序员小王꧔ꦿ2 天前
BeautifulSoup、lxml/XPath和正则表达式在数据爬取中的适用场景
正则表达式·beautifulsoup