我们在生活中经常会有这样的场景,在某软件注册账号时,提示:请输入正确的电话号码,或者在创建密码时,提示:创建的密码过于简单,还有输入邮箱或者身份证号码时,提示你:输入的证件或者邮箱格式不对......等等此类的场景。这些场景其实就是正则匹配的一个实际应用场景。后面我会举几个例子来体现。举这样的一个例子是为了让大家能够真正感受代码与实际生活的结合,一方面学起来印象会更加深刻,另一方面理解起来也更加通俗易懂,希望大家都尽可能的带着思考去学习,思考为什么会有这种东西。脱离实际生活的代码就没有了任何价值,代码本质就是对实际生活案例的建模!
正则表达式或者正则匹配,这几个词语听起来挺唬人的,通俗讲就是模式匹配规则,一种特殊的搜索公式。
假设你在拼乐高,乐高有好几千个零件,这些零件的颜色,形状都不一样,现在你想快速找到其中所有颜色为红色,形状为圆柱形的零件,正常情况下你要一个一个找对吧。通过正则表达式你可以制定匹配规则,然后程序会根据你制定的规则,找到所有符合条件的零件。这就是正则表达式的作用:帮助你在海量的文本中,找到符合特定模式的内容。
1. regexp | 语法结构
regexp ?options? expression string ?matchVar? ?subMatchVar1 subMatchVar2 ...?
参数解释:
?options?:可选的参数,用于修改regexp命令的行为。常见包括-all,-inline,-nocase。
expression:这是你要应用的正则表达式,用于定义匹配模式。它描述了一种搜索模式。
string:这是待匹配的字符串,即已经存在的文本。
?matchVar?:可选的参数。如果提供,它将被赋值为匹配到的字符串。
?subMatchVar1 subMatchVar2 ...?:可选的参数。它们用于捕获正则表达式中括号内的子模式(子表达式)匹配的字符串。如果expression中有括号定义的子模式,每个子模式匹配的字符串将按顺序被赋值给这些变量。
2. expression
从上述的用法来看,最关键的用法就是如何制定匹配规则,换句话说如何来编写这个表达式至关重要。在学习编写expression之前我们要了解一些规则,只有掌握了这些规则,才能够构建出正确的我们想要的匹配模式。
元字符
元字符是正则表达式中具有特殊意义的字符。它们用于表示特定的匹配规则。
特殊符号 | 解释 |
. | 匹配除换行符之外的任意单个字符。 |
^ | 匹配输入字符串的开始位置。 |
$ | 匹配输入字符串的结束位置。 |
| | 表示选择,匹配符号左边的表达式或右边的表达式。 |
() | 标记一个子表达式的开始和结束位置,用于分组。 |
[] | 表示字符集合。匹配所包含的任意一个字符。 |
{} | 表示量词的精确匹配次数。 |
\ | 转义字符,用于匹配那些在正则表达式中有特殊意义的字符。 |
量词
量词指定了元字符或字符集合必须出现的次数,它们控制着前面元素的匹配次数。常见的量词包括:
量词符号 | 解释 |
* | 匹配前面的元素零次或多次。等价于{0,}。 |
+ | 匹配前面的元素一次或多次。等价于{1,}。 |
? | 匹配前面的元素零次或一次。等价于{0,1}。 |
{n} | 匹配前面的元素恰好n次。 |
{n,} | 匹配前面的元素至少n次。 |
{n,m} | 匹配前面的元素至少n次,但不超过m次。 |
正则表达式的强大之处在于这些元字符和量词的组合使用,它们可以构建出复杂的匹配模式,以满足各种文本处理的需求。这么多符号到底该怎么用,后面一篇文章将会用具体的代码来逐个介绍,敬请关注。 ^_^
3. 总结
Tcl 正则表达式的本质:是一种字符串模式匹配引擎,它基于一组规则和语法来解释和处理字符串。正则表达式引擎会根据用户指定的正则表达模式,从目标文本中找到与之匹配的子串,并返回结果或者执行相应的操作。