目录
一、正则表达式 - 教程
二、 正则表达式的模式
(一)字面值字符
(二)特殊字符
(三)字符类
(四)元字符
(五)量词
(六)边界符号
三、正则表达式 - 简介
(一)像 data(\w)?\.dat 这样的模式将查找下列文件:
(二)使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\.dat 匹配下列所有文件:
(三)尽管这种搜索方法很有用,但它还是有限的。
(四)正则表达式的使用,可以通过简单的办法来实现强大的功能。
1、^ 为匹配输入字符串的开始位置。
2、[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。
3、abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。
(五)我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。
(六)实例:匹配以数字开头,并以 abc 结尾的字符串。
四、正则表达式元字符和特性
(一)字符匹配
1、普通字符
2、元字符
(二)量词
1、*:匹配前面的模式零次或多次。
2、+:匹配前面的模式一次或多次。
3、?:匹配前面的模式零次或一次。
4、{n}:匹配前面的模式恰好 n 次。
5、{n,}:匹配前面的模式至少 n 次。
6、{n,m}:匹配前面的模式至少 n 次且不超过 m 次。
(三)字符类
1、[ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 "a"、"b" 或 "c"。
2、[^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。
(四)边界匹配
1、^:匹配字符串的开头。
2、$:匹配字符串的结尾。
3、\b:匹配单词边界。
4、\B:匹配非单词边界。
(五)分组和捕获
1、( ):用于分组和捕获子表达式。
2、(?: ):用于分组但不捕获子表达式。
(六)特殊字符
1、\:转义字符,用于匹配特殊字符本身。
2、.:匹配任意字符(除了换行符)。
3、|:用于指定多个模式的选择。
五、为什么使用正则表达式?
(一)典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。
(二)通过使用正则表达式,可以:
1、测试字符串内的模式。
2、替换文本。
3、基于模式匹配从字符串中提取子字符串。
六、发展历史
七、应用领域
(一)C# 正则表达式
(二)Java 正则表达式
(三)JavaScript 正则表达式
(四)Python 正则表达式
(五)Ruby 正则表达式
(一)正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。
(二)正则表达式是一种用于模式匹配和搜索文本的工具。
(三)正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。
(四)正则表达式可以应用于各种编程语言和文本处理工具中,如 JavaScript、Python、Java、Perl 等。
(五)实力:从字符串 str 中找出数字:
例如字母、数字、空格等,可以直接匹配它们自身。
例如点号 .
、星号 *
、加号 +
、问号 ?
等,它们具有特殊的含义和功能。
用方括号 [ ]
包围的字符集合,用于匹配方括号内的任意一个字符。
例如 \d
、\w
、\s
等,用于匹配特定类型的字符,如数字、字母、空白字符等。
例如 {n}
、{n,}
、{n,m}
等,用于指定匹配的次数或范围。
例如 ^
、$
、\b
、\B
等,用于匹配字符串的开头、结尾或单词边界位置。
除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。
例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。
通过理解 * 通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。
示例:
以上的正则表达式可以匹配 runoob、runoob1、run-oob、run_oob, 但不匹配 ru,因为它包含的字母太短了,小于 3 个无法匹配。也不匹配 runoob$, 因为它包含特殊字符。
普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。
元字符具有特殊的含义,例如 \d
匹配任意数字字符,\w
匹配任意字母数字字符,.
匹配任意字符(除了换行符)等。
{n}:
匹配前面的模式恰好 n 次。{n,}:
匹配前面的模式至少 n 次。{n,m}
:匹配前面的模式至少 n 次且不超过 m 次。[ ]:
匹配括号内的任意一个字符。例如,[abc]
匹配字符 "a"、"b" 或 "c"。[^ ]:
匹配除了括号内的字符以外的任意一个字符。例如,[^abc]
匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。^
:匹配字符串的开头。$
:匹配字符串的结尾。\b
:匹配单词边界。\B
:匹配非单词边界。( )
:用于分组和捕获子表达式。(?: )
:用于分组但不捕获子表达式。\
:转义字符,用于匹配特殊字符本身。.
:匹配任意字符(除了换行符)。|
:用于指定多个模式的选择。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
可以查找文档内或输入域内特定的文本。
例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。
(一)正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
(二)1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。
(三)随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。
(四)如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。
目前,正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
命令或环境 | . | [ ] | ^ | $ | \( \) | \{ \} | ? | + | | | ( ) |
vi | √ | √ | √ | √ | √ | |||||
Visual C++ | √ | √ | √ | √ | √ | |||||
awk | √ | √ | √ | √ | awk是支持该语法的,只是要在命令 行加入 --posix or --re-interval参数即可,可见 man awk中的interval expression | √ | √ | √ | √ | |
sed | √ | √ | √ | √ | √ | √ | ||||
delphi | √ | √ | √ | √ | √ | √ | √ | √ | √ | |
python | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
java | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
javascript | √ | √ | √ | √ | √ | √ | √ | √ | √ | |
php | √ | √ | √ | √ | √ | |||||
perl | √ | √ | √ | √ | √ | √ | √ | √ | √ | |
C# | √ | √ | √ | √ | √ | √ | √ | √ |