门户网站建设存在的问题和差距,无锡做智能网站,微平台在哪里找,龙凤网站建设云聚达正则表达式#xff08;5#xff09;#xff1a;常用符号 小结 本博文转载自
在本博客中#xff0c;”正则表达式”为一系列文章#xff0c;如果你想要从头学习怎样在Linux中使用正则#xff0c;可以参考此系列文章#xff0c;直达链接如下#xff1a;
在Linux中使用正… 正则表达式5常用符号 小结 本博文转载自
在本博客中”正则表达式”为一系列文章如果你想要从头学习怎样在Linux中使用正则可以参考此系列文章直达链接如下
在Linux中使用正则表达式
“正则”系列的每篇文章都建立在前文的基础之上所以请按照顺序阅读这些文章否则有可能在阅读中遇到障碍。
之前已经总结了怎样利用正则表达式去”匹配位置”或者”匹配连续次数”此处我们来总结一下正则中其他的一些常用符号。
在开始学习新知识之前我们先回顾一下之前使用过的一个符号它就是”.”
之前说过在正则表达式中”.”表示匹配任意单个字符换行符除外示例如下。 示例中的正则表示只要a字母后面跟随任意3个字符即可被正则表达式匹配到。
正如上图所示字母a后面跟随的3个字符可以是”数字”或者是”字母”再或者是”符号”都可以因为”.”表示任意单个字符”任意”就体现在这里了。
如果我们想要更加”细致”一些呢
比如我们仍然想要从文本中找出a字母后面跟随3个字符的字符串但是我们对后面跟随的3个字符有要求并不能是任意3个字符而必须是三个字母我们该怎么做呢
没错这个问题会引出我们将要认识的新符号它就是 “[[:alpha:]]”
在正则表达式中[[:alpha:]] 表示”任意字母”不区分大小写
[[:alpha:]] 这个符号看上去略微有点复杂但是不要害怕习惯了就好其实”[[:alpha:]]” 可以拆开成几部分去理解我们后面再聊。
我们先来实验一下示例如下。 上例中”[[:alpha:]]{3}”表示3个连续的任意字母此处结合了之前的知识其中”{3}” 表示其前面的字符连续出现3次如果你没有看懂请回顾前文所以上述正则表达式整体的含义就是 只有a字母后面跟随了3个字母的字符串才会被匹配到如果a字母后面跟随的3个字符中包含非字母数字或符号就不会被匹配到正如上图所示。
所以使用[[:alpha:]]可以匹配到不区分大小写的字母没错alpha的读音你应该很熟悉了就是”阿尔法狗”的”阿尔法”。
那么我们再”细化”一点我们不仅要字母a后面跟随的3个字符是字母我们还要求这3个字符必须是小写字母我们该怎么办呢
我们可以使用另外一个符号它就是”[[:lower:]]”
[[:lower:]]表示任意小写字母我们来试试。 可以看到只有当a后面的3个字符均为小写字母时才会被匹配到。
我们已经学会了怎样表示”不区分大小写的字母”和”小写字母”那么怎样表示”大写字母”呢
我们可以使用[[:upper:]]表示任意大写字母示例如下。 聪明如你一定已经发现了一些规律规律就是我们替换”[[: :]]”中的单词即可表示不同的含义。
那么我们来看看一些常用的符号都表示什么含义。
[[:alpha:]] 表示任意大小写字母
[[:lower:]] 表示任意小写字母
[[:upper:]] 表示任意大写字母
[[:digit:]] 表示0到9之间的任意单个数字包括0和9
[[:alnum:]] 表示任意数字或字母
[[:space:]] 表示任意空白字符包括”空格”、”tab键”等。
[[:punct:]] 表示任意标点符号
好了了解了上述符号的含义后你可以自己创建一个测试文件进行测试快点动手试试吧我相信亲自实验获得的理解肯定更加深刻。
之前我们使用”[[:lower:]]”表示任意一个小写字母其实还有另外一种方法也能够表示”任意单个小写字母”。
除了”[[:lower:]]””[a-z]”也能表示任意一个小写字母你一定猜出来了没错”[a-z]”所表示的意思就是从a到z的26个小写英文字母中的任意一个。
所以[a-z]与[[:lower:]]是等价的。
同理[A-Z]也能表示任意一个大写字母[A-Z]与[[:upper:]]是等价的示例如下。 有了之前的基础你猜猜”[a-zA-Z]”表示什么意思
没错”[a-zA-Z]”表示任意字母不区分大小写。
[a-zA-Z]与[[:alpha:]]等效。
同理[0-9]与[[:digit:]]等效都表示0到9之间的任意单个数字示例如下。 我们已经了解到[a-z]表示任意一个小写字母其实”[a-z]”外侧的方括号有特殊的含义。
方括号在正则中代表什么意思呢
“[ ]”表示匹配指定范围内的任意单个字符这样说可能不容易理解我们来动手实验一下就能秒懂示例如下。 可以看到字母b后面跟随字母c、或者跟随字母e、或者跟随字母g都可以被匹配到”[ceg]”表示c或者e或者g中的任何一个字母都能被匹配到。
那么活学活用”[Bd#3]”表示什么意思呢
[Bd#3]表示字符是大写B、或者是小写d、或者是符号#、再或者是数字3都可以被匹配到示例如下 “[ ]”表示匹配指定范围内的任意单个字符换句话说就是字符与方括号”[ ]”内的任意一个字符相同就可以被匹配到。
我们了解了方括号的含义以后再回过头看之前的符号会有新发现。
上文说过[0-9]表示0到9之间的任意一个数字其实[0-9]就相当于[0123456789]
同理[a-z]表示a到z之间的任意一个字母其实[a-z]就相当于[abcdefghijklmnopqrstuvwxyz]
之前说过[[:alpha:]]代表单个任意的字母前文也提到过[[:alpha:]]可以拆开去理解聪颖如你一定想到了我们可以把[[:alpha:]]拆成两部分理解。
第一部分最外层的[ ]表示指定范围内的任意单个字符
第二部分最内层的[:alpha:]表示不区分大小写的字母
所以当两部分结合在一起时就变成了[[:alpha:]]就表示任意单个字母不区分大小写[[:digit:]]等其他类似符号也可以这样拆开来理解。
我们已经理解了方括号”[ ]”的含义我们再来认识一个它的孪生兄弟它就是 “[^ ]”
“[^ ]”表示匹配指定范围外的任意单个字符注意它与”[ ]”的含义正好相反。
“[ ]”表示匹配指定范围内的任意单个字符。
如果你觉得不好理解可以先看示例示例如下 如上图所示字母f后面跟随的字母只要不是a、c、e、g中的任何一个即可被匹配到相当于排除了a、c、e、g这些字母。
所以”[^ ]”表示匹配指定范围外的任意单个字符
我们之前说过”^”符号的含义为锚定行首但是当它与”[ ]”结合在一起的时候则没有锚定行首之意只能把”[^ ]”当做一个整体去看待可以把此处的 “^”理解为取反。
既然”[ ]”与”[^ ]”是相对的那么能不能把[0-9]改写成[^0-9]呢必须能啊。
“[^0-9]”表示匹配单个非数字字符与[0-9]的含义这正好相反示例如下。 如上图所示只要字母e后面跟随的字符不是数字就可以被匹配到。
同理
[^a-z]表示非小写字母的单个字符可以被匹配到。
[^A-Z]表示非大写字母的单个字符可以被匹配到。
[^a-zA-Z]表示非字母的单个字符可以被匹配到,比如数字或符号。
[^a-zA-Z0-9]表示非字母、非数字的单个字符可以被匹配到比如符号。
结合之前的理论你一定想到了既然[0-9]与[[:digit:]]等效那么[^0-9]与[^[:digit:]]等效吗
试试就知道了如下图所示的确是等效的。 举一反三
[^0-9]与[^[:digit:]]等效
[^a-z]与[^[:lower:]]等效
[^A-Z]与[^[:upper:]]等效
[^a-zA-Z]与[^[:alpha:]]等效
[^a-zA-Z0-9]与[^[:alnum:]]等效
其实不仅[0-9]与[[:digit:]]能够表示数字还有一些简写格式的符号也能表示数字比如”\d”
但是并不是所有的正则表达式处理器都能够识别这些简写格式
示例如下 如上图所示默认情况下grep就无法识别”\d”这种简短格式所以上图中没有匹配到任何结果。
如果我们想要让grep能够识别这种简短格式可以使用-P选项表示grep使用兼容perl的正则表达式引擎示例如下。 我想有了前面的基础再理解这些简写格式应该相对容易了。
所以此处直接列出一些常用的简写格式的符号不再赘述了大家可以动手实验一下。
\d 表示任意单个0到9的数字
\D 表示任意单个非数字字符
\t 表示匹配单个横向制表符相当于一个tab键
\s表示匹配单个空白字符包括”空格””tab制表符”等。
\S表示匹配单个非空白字符
小结
为了方便以后回顾我们将上述知识点总结一下。
如果你不明白下述描述请回顾上述示例。
. 表示匹配任意单个字符
* 表示匹配前面的字符任意次包括0次
[ ] 表示匹配指定范围内的任意单个字符
[^ ] 表示匹配指定范围外的任意单个字符[[:alpha:]] 表示任意大小写字母
[[:lower:]] 表示任意小写字母
[[:upper:]] 表示任意大写字母
[[:digit:]] 表示0到9之间的任意单个数字包括0和9
[[:alnum:]] 表示任意数字或字母
[[:space:]] 表示任意空白字符包括空格、tab键等。
[[:punct:]] 表示任意标点符号[0-9]与[[:digit:]]等效
[a-z]与[[:lower:]]等效
[A-Z]与[[:upper:]]等效
[a-zA-Z]与[[:alpha:]]等效
[a-zA-Z0-9]与[[:alnum:]]等效[^0-9]与[^[:digit:]]等效
[^a-z]与[^[:lower:]]等效
[^A-Z]与[^[:upper:]]等效
[^a-zA-Z]与[^[:alpha:]]等效
[^a-zA-Z0-9]与[^[:alnum:]]等效#简短格式并非所有正则表达式解析器都可以识别
\d 表示任意单个0到9的数字
\D 表示任意单个非数字字符
\t 表示匹配单个横向制表符相当于一个tab键
\s表示匹配单个空白字符包括空格tab制表符等
\S表示匹配单个非空白字符这篇文章就总结到这里希望能够帮助到你~~