- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Perl模式匹配总结
目录
contents
正则表达式基础
Perl中正则表达式应用
模式匹配进阶技巧
常见问题及解决方案
Perl正则表达式库介绍
实战案例分享
正则表达式基础
01
字符类
使用方括号`[]`定义,可以匹配方括号中的任意一个字符。例如,`[abc]`可以匹配`a`、`b`或`c`。
量词
用于指定字符或字符类的出现次数。常见的量词有`*`(匹配0次或多次)、`+`(匹配1次或多次)、`?`(匹配0次或1次)、`{n}`(匹配n次)、`{n,}`(匹配n次或多次)、`{n,m}`(匹配n到m次)。
字符类与量词
\b表示单词边界,\B表示非单词边界。例如,\bcat\b只匹配单词cat,而不匹配concatenate中的cat。
^表示字符串开头,$表示字符串结尾。例如,^The只匹配以The开头的字符串,而end$只匹配以end结尾的字符串。
边界与锚点
锚点
边界
1
2
3
使用竖线`|`表示或关系,可以匹配该竖线前后的任意一个表达式。例如,`abc|def`可以匹配abc或def。
选择
使用圆括号`()`可以将多个字符或字符类组合成一个整体进行匹配。例如,`(abc)+`可以匹配一个或多个连续的abc。
分组
使用反斜杠``加上数字可以引用前面圆括号中捕获的内容。例如,`(w+)s+1`可以匹配两个相同的单词,如hellohello。
引用
选择、分组与引用
用于改变正则表达式的匹配行为。常见的修饰符有`i`(忽略大小写)、`m`(多行模式)、`s`(单行模式)、`x`(忽略空白字符和注释)等。
修饰符
可以在正则表达式中使用特殊的语法来修改匹配模式。例如,`(?i)abc`表示在匹配时不区分大小写,可以匹配abc、Abc、ABC等。另外,还有`(?-i)`、`(?m)`、`(?-m)`、`(?s)`、`(?-s)`、`(?x)`、`(?-x)`等用于开启或关闭相应的修饰符。
模式修饰
修饰符与模式修饰
Perl中正则表达式应用
02
基础匹配
忽略大小写
行首行尾匹配
多行模式
使用`m//`操作符进行基础的正则表达式匹配,例如`$string=~m/pattern/`。
使用`^`和`$`分别匹配字符串的行首和行尾,例如`$string=~m/^start/`和`$string=~m/end$/`。
在模式匹配时,可以使用`i`修饰符来忽略大小写,例如`$string=~m/pattern/i`。
在多行字符串中进行模式匹配时,可以使用`m`修饰符开启多行模式,例如`$string=~m/pattern/m`。
使用`s///`操作符进行基础的替换操作,例如`$string=~s/pattern/replacement/`。
基础替换
全局替换
替换并返回新字符串
替换并忽略大小写
默认情况下,`s///`只替换第一个匹配项,可以使用`g`修饰符进行全局替换,例如`$string=~s/pattern/replacement/g`。
可以使用`r`修饰符替换并返回新字符串,原字符串保持不变,例如`my$new_string=$string=~s/pattern/replacement/r`。
结合使用`i`修饰符可以忽略大小写进行替换操作,例如`$string=~s/pattern/replacement/i`。
替换操作
使用`split`函数以正则表达式为分隔符分割字符串,例如`my@parts=split/pattern/,$string`。
基础分割
可以使用第三个参数限制分割次数,例如`my@parts=split/pattern/,$string,3`。
限制分割次数
在正则表达式中使用括号捕获分隔符,可以在结果数组中保留分隔符,例如`my@parts=split/(pattern)/,$string`。
保留分隔符
分割字符串
基础捕获组
在正则表达式中使用括号创建捕获组,例如`(pattern)`。
反向引用
在正则表达式内部或替换操作中使用`n`(n为数字)引用前面的捕获组内容,例如`$string=~s/(pattern1)1/$1world/`。
命名捕获组
使用`(?namepattern)`创建命名捕获组,并通过`$+{name}`或`$+{name}`引用捕获内容,例如`$string=~m/(?yeard{4})-(?monthd{2})-(?dayd{2})/`。
非捕获组
使用`(?:pattern)`创建非捕获组,该组匹配的内容不会被捕获和存储,例如`$string=~m/(?:pattern1)pattern2/`。
模式匹配进阶技巧
03
贪婪匹配
尽可能多地匹配,
原创力文档


文档评论(0)