Chinaunix首页 | 论坛 | 博客
  • 博客访问: 550135
  • 博文数量: 911
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7395
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

文章分类

全部博文(911)

文章存档

2026年(14)

2025年(202)

2024年(244)

2023年(247)

2022年(202)

我的朋友

分类: 网络与安全

2025-12-19 15:33:20

本文分享自天翼云开发者社区《perl正则语法总结》.作者:李****壮

一、介绍

       正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。Perl语言的正则表达式功能非常强大,基本上是常用语言中{BANNED}最佳强大的,很多语言设计正则式支持的时候都参考Perl的正则表达式

二、语法

2.1 元字符

字符 说明
. 匹配除换行符以外的任意字符
\w 匹配任何单词字符,包含字母或数字或下划线
\W 匹配任何非单词字符
\s 匹配任意的空白字符,包含空格、制表符、换页字符
\S 匹配任何非空白字符
\d 匹配数字字符
\D 匹配非数字字符
\f 匹配换页字符
\n 匹配换行符
\r 匹配回车字符
\t 匹配跳进字符
\v 匹配垂直跳进字符
\A 不区分单行多行模式,仅匹配字符串的开头。
^ 单行模式匹配下,匹配字符串的开始。多行模式,匹配每一行的字符串开始
\z 不区分单行多行模式,匹配字符串的结束
$ 单行模式匹配下,匹配字符串的结束。多行模式,匹配每一行的字符串结束
\b 匹配某个单词边界,即,某个单词和空格之间的位置。例如,st\b 匹配 test 中的 st,但是不匹配 testa 中的 st
\B 匹配非单词边界
\ 取消元字符的转义

 

2.2 重复

代码 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
<数量词>? <数量词>指的是 、?等上述表格表达数量的字符,? 使、+、?、{} 变成非贪婪模式。例如*?、??

 

2.3 逻辑、分组

代码 说明
()

分组,并按( 出现的顺序依次赋值给匹配后的值,$n,n从1计数

示例:

字符串:  aabbcc 

正则表达式:((aa)(bb))cc

取值:

$0: aabbcc

$1: aabb

$2: aa

$3: bb

(?:...)

()的不分组版本,()内的匹配不编号

| |代表左右表达式任意匹配一个
它总是先尝试匹配左边的表达式,一旦成功匹配则跳过匹配右边的表达式。
如果|没有被包括在()中,则它的范围是整个正则表达式
[] 字符集(字符类)。对应的位置可以是字符集中任意字符。
字符集中的字符可以逐个列出,也可以给出范围,如labc]或
[a-c]。{BANNED}中国第一个字符如果是^则表示取反,如[^abc]表示不是
abc的其他字符。
所有的特殊字符在字符集中都失去其原有的特殊含义。在字
符集中如果要使用]、-或^,可以在前面加上反斜杠,或把]
-放在{BANNED}中国第一个字符,把^放在非{BANNED}中国第一个字符。
(?P...) 分组,除了原有的编号外再指定一个额外的别名。例如(?Pabc) 
\number

引用编号为number的分组匹配到的字符串,

例如  (\d)test\1  可以匹配 1test1 但不匹配 1test2

(?P=name)

引用别名为的分组匹配到的字符串

例如 (?P\d)test(?P=id) 可以匹配 1test1 ,但不匹配 1test2

 

2.4 断言

代码 说明
(?iLmsux)

iLmsux的每个字符代表一个匹配模式,只能用在正则表达式的开头,可选多个

iLmsux 可以为 i, L, m, s, u, x
i: 忽略大小写
L: 字符集本地化,为了支持多语言版本的字符集使用环境
u: 使用\w,\W,\b,\B这些元字符时将按照UNICODE定义的属性
m: 多行模式,改变 ^ 和 $ 的行为
s: '.' 的匹配不受限制,包括换行符
x: 冗余模式,可以忽略正则表达式中的空白和#号的注释
例如 (?i)aaa
 
(?#...) #后的内容将作为注释被忽略
(?=...)

之后的字符串内容需要匹配表达式才能成功匹配,不消耗字符串内容

例如 a(?=b) 匹配 ab中的a ,不匹配 ad

(?!..)

之后的字符串内容需要不匹配表达式才能成功匹配,不消耗字符串内容。

例如 a(?!b) 匹配 ad中的a ,不匹配 ab

(?<=....)

之前的字符串内容需要匹配表达式才能成功匹配,不消耗字符串内容。

例如(?<=a)b,匹配ab 中的b ,不匹配 cb

(?

之前的字符串内容需要不匹配表达式才能成功匹配,不消耗字符串内容。

例如(?

(?(id/name)yes-pattern|no-pattern)

如果编号为id/别名为name的组匹配到字符,则需要匹配yes-pattern,否则需要匹配no-pattern,no-paternn可以省略。

例如 ^(\()?[^()]+(?(1)\))$

如果开头是 ( ,结尾必须是 )

阅读(11) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~