正则表达式「^」符号的正确理解方式

「^」这个符号在正则表达式的中的应用相信是所有程序员都掌握的, 因为它是正则表达式中最基础最常用的知识点。

它在正则表达式中表示两种不同的意义

01

表示匹配一段文本开头的位置, 注意, 匹配的是一个位置, 而不是具体的某个字符,「 匹配位置」在正则表达式中有很重要的意义。

这个正则表达式就是用来匹配以小写的「a」开头的字符串, 如「alibaba」,但不能匹配「baidu」,「^」代表的是字符串第一个字母前面那个用肉眼看不见的位置。

02

以上面这个正则表达式为例,一般情况下我们会使用两种思路去理解

  1. 不匹配「a」和「b」开头的字符串
  2. 匹配除「a」和「b」以外的所有字符串开头的字符串

通过这两种思路去理解这个正则表达式, 最终的答案都是一样的,也是正确的。 我们思考问题的逻辑思路更倾向于第一种理解方式。

然而, 对于整套正则表达式体系理念来说, 第一种理解方式是错误的。 在正则表达式理念中, 只有去「匹配」些什么, 从来没有「不匹配」这一说法,这一点是必须要区分清楚的。

当我们处理正则问题时, 在梳理逻辑时将「匹配」与「不匹配」混杂在一起,势必会增加处理问题的复杂度, 对于简单的问题受到的影响也许不是很明显 , 就像上面举的例子那样, 因为还在我们智力的承受范围内,但碰到复杂的问题时, 就会像掉进沼泽一样, 怎么爬也爬不出来, 最终被困死在泥潭中。但是,假如只是以单纯的「匹配」去理解,就能简化处理问题的难度,降低复杂度,2肯定比1复杂。 因此,正则表达式最重要的核心理念就是「匹配」

另外,在程序设计中用到的替换、切割、查找等操作, 都是程序类库封装的功能, 和正则表达式本身半毛钱关系也没有。 理解「匹配」也就意味着对学习正则表达式的入门。

原文发布于微信公众号 - 带你撸出一手好代码(gh_afab56b37671)

原文发表时间:2017-03-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏怀英的自我修炼

Java漫谈6

今天这篇想聊聊数组。 在聊数组之前先聊个别的,如果想在Java中实现一个 数字-月份 转换,那我该怎么做呢?就比如数字1代表了一月份,数字2代表了二月份…数字1...

3649
来自专栏walterlv - 吕毅的博客

C# 中那些可以被重载的操作符,以及使用它们的那些丧心病狂的语法糖

2018-05-19 15:20

772
来自专栏Python小屋

Python标准库collections中与字典有关的类

Python标准库中提供了很多扩展功能,大幅度提高了开发效率。这里主要介绍OrderedDict类、defaultdict类和Counter类。 (1)Orde...

2826
来自专栏liulun

Nim教程【六】

目前看来这是国内第一个关于Nim的系列教程 先说废话 Rust1.0已经发布了, 国内有一个人为这个事情写了一篇非常长的博客, 这篇文章我前几天草草的看了...

2366
来自专栏编程

Python函数之一切皆对象

今天我们要讲的是 对象 避免误会,常老师先澄清一下,这里面说的对象指的是object,不是你的lover,也不是你的sweetheart…… 有的小伙伴可能会觉...

1997
来自专栏C语言C++游戏编程

世界最强的编程语言:C语言

char:字符型,用来存储小范围的整数(-128~127)和字符(所有的ASCII字符,128个),一个字节。

1432
来自专栏JavaEE

Java面试题-01前言:面试题:总结:

1885
来自专栏iKcamp

翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 2 章:函数基础

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 第 2 章:函数基础 函数式编程...

3129
来自专栏我的博客

冒泡排序

原理: 1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。 2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元...

3215
来自专栏用户2442861的专栏

Json概述以及python对json的相关操作

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScr...

712

扫码关注云+社区

领取腾讯云代金券