searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

perl正则语法总结

2024-11-13 09:32:10
12
0

一、介绍

       正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考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]。第一个字符如果是^则表示取反,如[^abc]表示不是
abc的其他字符。
所有的特殊字符在字符集中都失去其原有的特殊含义。在字
符集中如果要使用]、-或^,可以在前面加上反斜杠,或把]
-放在第一个字符,把^放在非第一个字符。
(?P<name>...) 分组,除了原有的编号外再指定一个额外的别名。例如(?P<id>abc) 
\number

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

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

(?P=name)

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

例如 (?P<id>\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

(?<!....)

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

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

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

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

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

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

0条评论
0 / 1000
李****壮
4文章数
0粉丝数
李****壮
4 文章 | 0 粉丝
原创

perl正则语法总结

2024-11-13 09:32:10
12
0

一、介绍

       正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考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]。第一个字符如果是^则表示取反,如[^abc]表示不是
abc的其他字符。
所有的特殊字符在字符集中都失去其原有的特殊含义。在字
符集中如果要使用]、-或^,可以在前面加上反斜杠,或把]
-放在第一个字符,把^放在非第一个字符。
(?P<name>...) 分组,除了原有的编号外再指定一个额外的别名。例如(?P<id>abc) 
\number

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

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

(?P=name)

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

例如 (?P<id>\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

(?<!....)

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

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

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

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

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

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

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0