linux 正则表达式深度解析
概述
正则表达式文法大致可分为三种标准:基本正则表达式(BRE)、扩展正则表达式(ERE)和高级正则表达式(ARE)。其中,BER和ERE属于POSIX标准,而ARE则是各家定义的扩展。
POSIX正则表达式
在POSIX标准中,定义了两种正则表达式语法:基本正则表达式(BRE)和扩展正则表达式(ERE)。
BRE的语法符号包括:
.:匹配任意单一字符。
[]:字符集匹配,匹配方括号内定义的任一字符。
[^]:字符集排除匹配,匹配未包含在方括号内的字符。
^:匹配字符串开头。
$:匹配字符串结尾。
\(和\):定义子表达式。
:子表达式向前引用,其中n为数字。此功能涉及正则语义的回溯,需采用NFA算法进行匹配。
-:匹配前一个字符零次或多次。
\{m,n\}:匹配前一个字符至少m次,至多n次。
ERE在BRE的基础上进行了改进和扩展,增加了以下语法符号:
?:匹配前一个字符零次或一次。
+:匹配前一个字符至少一次。
|:表示或运算,其左右两侧均可为子表达式。
在ERE中,取消了子表达式和次数匹配的转义符引用语法,同时也取消了非正则语义的子表达式向前引用能力。
BRE和ERE共享相同的POSIX字符类定义,还支持较少使用的字符类比较操作和等效体操作。
高级正则表达式工具如f、fr、wfr、bwfr等默认使用ERE模式,并支持Perl风格的字符类。这些字符类包括字母、数字、空白字符、空格符、控制字符等。还有特殊字符类和特殊字符换码序列。其中,ARE是ERE的超集,支持“懒惰匹配”功能,即尽可能少的匹配字符。这种功能在'?', '', '+' 或 '{m,n}'后追加'?'符号即可启用。在编程世界中,正则表达式是一种强大的工具,用于处理文本数据。对于理解并操作复杂的文本模式,它有着至关重要的作用。现在,我们来深入理解一下stRegEx的一些高级特性。
stRegEx支持完整的字符串匹配和子串匹配。例如,当使用"a.b"匹配"abab"时,它会匹配整个字符串。而使用"a.?b"时,则只会匹配前两个字符"ab"。这种灵活性使得我们可以根据具体需求进行精确的匹配。
stRegEx也支持子表达式的向前引用匹配。通过'',我们可以引用之前定义的子表达式。比如"(a.)\1"可以智能地匹配"abcabc"这样的重复模式。
无名子表达式的使用也是stRegEx的一大特色。通过"(?:表达式)"的方式,我们可以创建一个无名表达式,它在匹配时不会返回一个单独的匹配项。
关于向前预判,这是一种确保字符串特定部分满足某些条件的技术。肯定预判"(?=表达式)"确保后续字符串满足某个条件,而否定预判"(?!表达式)"则确保后续字符串不满足某个条件。这种特性使得我们可以进行更复杂的文本模式匹配。
stRegEx还支持模式切换前缀,这使我们能够根据不同的需求调整正则表达式的行为。例如,":b"会切换到POSIX BRE模式,"e"会切换到POSIX ERE模式,"q"则启用文本字面匹配模式。"c"和"i"分别用于执行大小写敏感和忽略大小写的匹配。
关于行敏感的匹配,stRegEx提供了几种不同的选项以适应不同的需求。"n"、"m"等选项可以启用行敏感的匹配,而"p"、"s"等选项则提供了不同的行处理模式。这些选项使得我们可以根据具体场景选择合适的匹配模式。
stRegEx的扩展模式也是一个非常有用的特性。"x"开启扩展模式,允许我们忽略表达式中的空白符和注释符。这使得编写复杂的正则表达式变得更加容易和直观。
stRegEx的这些特性使得它成为一个功能强大、灵活多变的工具。无论是处理简单的文本数据还是处理复杂的文本模式,它都能提供高效的解决方案。通过深入理解并善用这些特性,我们可以更加高效地处理文本数据,从而提取出有价值的信息。 Perl 风格字符类换码序列的非凡之旅
在 Perl 中,字符类换码序列为我们提供了一种强大的工具,让我们能够精确地控制字符串的匹配和替换。这些序列不仅丰富了我们的表达方式,还极大地扩展了我们的编程能力。与 BRE/ERE 模式不同,Perl 风格的字符类换码序列具有其独特的魅力和。
下面,我们将一起领略这些序列的魅力:
1. \a - 它是响铃字符,能够在终端引发响铃。
2. \A - 不论当前模式如何,它只匹配整个字符串的最开头,确保我们从字符串的起始处开始匹配。
3. \b - 这是退格字符,表示为 '\x08',能够后退并删除前一个字符。
4. \B - 它表示转义字符本身 ('\\'),让我们能够使用特殊字符而不必担心它们被解释为其他含义。
5. \cX - 控制符-X (= X & 037),让我们能够处理特殊的控制字符。
接下来的序列专门用于处理数字和文本:
6. \d 或 [[:digit:]] - 表示 10 进制数字 ('0' - '9'),无论我们在何处都能轻松找到数字。
7. \D 或 [^[:digit:]] - 非数字字符,帮助我们排除数字。
8. \s 或 [[:space:]] - 空白符,包括空格、制表符等。
9. \S 或 [^[:space:]] - 非空白符,排除所有空白字符。
还有一些针对特定符号的序列:
1. \e - 退出符 ('\x1B'),表示一个特殊的退出操作。
3. \m 或 [[:<:]] 和 \M 或 [[:>:]] 分别表示单词的开始和结束位置。
4. - 换行符 ('\x0A'),用于分隔文本行。
5. \r - 回车符 ('\x0D'),常用于控制文本的移动。
7. \uX - 表示 16 位 UNICODE 字符 (X∈[0000 .. FFFF])。
8. \UX - 表示 32 位 UNICODE 字符 (X∈[00000000 .. FFFFFFFF])。这些序列使得我们可以轻松处理 Unicode 文本并对其进行精确操作。还有针对子表达式的向前引用序列: \X (X∈[1 .. 9]) 和 \XXX 用于引用先前捕获的子表达式。这些序列为我们提供了强大的能力来处理和复杂的字符串模式。在 Perl 中使用这些字符类换码序列可以极大地提高我们的编程效率和精度。它们是我们编程工具箱中的宝贵资源,使我们能够更轻松地处理各种字符串任务。Perl 风格的字符类换码序列为我们提供了丰富的工具集,使我们能够更深入地理解和操作文本数据。无论是处理数字、文本、控制字符还是 Unicode 字符,这些序列都能为我们提供极大的便利和帮助。
网络安全培训
- linux 正则表达式深度解析
- 微信小程序 switch组件详解及简单实例
- 基于PHP+Mysql简单实现了图书购物车系统的实例详
- 深入学习jQuery Validate表单验证(二)
- SQL Server性能调优之缓存
- Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
- JSP针对XML文件操作技巧实例分析
- PHP的反射类ReflectionClass、ReflectionMethod使用实例
- JavaScript ES5标准中新增的Array方法
- 使用JS 插件qrcode.js生成二维码功能
- thinkphp3.2.3框架动态切换多数据库的方法分析
- php socket通信简单实现
- ASP.NET笔记之广告控件的使用方法
- Nodejs为什么选择javascript为载体语言
- windows7配置Nginx+php+mysql的详细教程
- 基于curl数据采集之单页面并行采集函数get_htmls的