这个匹配email地址的正则表达式错在哪?
|

正则表达式与数字营销

这个匹配email地址的正则表达式错在哪?
这个匹配email地址的正则表达式错在哪?

最近我们团队的小朋友在准备某数字营销考试,说考试很难,因为还要考正则表达式,觉得很困惑。其实正则表达式就和算术一样是最基本的数字营销知识,熟练使用正则表达式也是每个数字营销者的基本技能。正则表达式可谓数字营销中的通行语言。本篇,极诣就花一些时间来介绍一下正则表达式和其应用。网上已经有有了太多正则表达式的教程和示例,我们不会为此多花篇幅。

什么是正则表达式?

正则表达式常常用英文regex(Regular Expression的缩写)来表示。它是利用一个字符串规则来匹配一组字符串的方法。比如.*,它就代表任意长度(包括空)的字符串。

在数字营销中,.*就是整个世界 —— 马骏

为什么要有正则表达式呢?因为你可以避免穷举。比如你想把一个IP段表示出来,你可以写成192\.168\.1\.\d{1,3}。而你要把极诣的网址提取出来可以用https?:\/\/[Mm][Aa][Xx][Kk][Ee][Tt]\.com\/

正则表达式有着各种版本,或者叫风格。在不同的编程语言和环境中,正则表达式有不同的写法,比如我们曾经介绍过在robots.txt中如何写表达式来匹配URL,那是一个非常简化的用法。但是大致上一些常用的正则表达式比较统一,都是PCRE(Perl Compatible Regular Expressions)或者其衍生。

几乎所有的编程语言、脚本语言都支持正则表达式来匹配字符串,包括了Excel中的VBA和更常用的JavaScript。许多主流的数字营销平台也都支持正则表达式。大部分的正则表达式是大小写敏感的。

怎么写正则表达式?

正则表达式在GA中广泛使用
正则表达式在GA中广泛使用

正则表达式有四个部分构成,以Google Analytics的版本举例:

  1. 通配符
    • . 匹配任何单个字符(字母、数字或符号)
    • ? 匹配前面的字符 0 次或 1 次
    • + 匹配前面的字符 1 次或多次
    • * 匹配前面的字符 0 次或多次
    • | 创建 OR(或)匹配
  2. 定位符
    • ^ 匹配位于字符串开头的相邻字符
    • $ 匹配位于字符串结尾的相邻字符
  3. 分组
    • (?) 匹配字符串任何位置中按相同顺序排列的字符,也可用于组合其他表达式
    • [?] 匹配字符串任何位置中按任何顺序排列的字符
    • 使用方括号可限定要匹配字符串中任何位置的字符的范围
  4. 转义符
    • \ 表示相邻字符应按字面意思解释,而不应解释为正则表达式元字符

以上并不是全部规则,但是常用的规则语法。事实上所有谷歌的产品(G-Suite)都使用RE2语法,这和普遍使用的PCRE略有不同。

写正则表达式的时候你需要了解当前环境支持哪些语法。举个例子百度站长工具中的支持的\w代表匹配包括下划线的任何单词字符,如HEr_9。相当于[A-Za-z0-9_]\w{2}表示连续两个这样的字符,但是这个表达式并不被百度站长工具的移动适配工具或改版工具规则支持。而\w+却被支持。

再有前面图中的Matching RegExp其实表达的是“匹配”也就是“包含”的意思。比如你的正则表达式是[Bb][Aa]?[Ii][Dd][Uu],那么它会匹配所有包含各种大小写版本的BaiduBAIDUbidubIdU

BIDU为百度纳斯达克股票缩写
BIDU为百度纳斯达克股票缩写

但是[Bb][Aa]?[Ii][Dd][Uu]前后都含有一个隐形的.*也就是说它等同于.*[Bb][Aa]?[Ii][Dd][Uu].*。如果你需要完全匹配,那么你需要在前后分别加上^和$。

贪婪和非贪婪

正则表达式默认的是贪婪模式。默认的贪婪模式则尽可能多的匹配所搜索的字符串而非贪婪模式尽可能少的匹配所搜索的字符串。

比如,用正则表达式Go+\w+去匹配Google。在贪婪模式下o+会匹配两个o,而非贪婪模式会匹配第一个o,而第二个o与之后的gle会被\w+匹配。一般在o+后面加上问号?来表示非贪婪模式。于是正则表达式写作Go+?\w+

正则表达式用在哪里?

正则表达式的主要功能有以下三类:

  1. 检验文本是否满足固定格式:如网站域名、网址格式、手机号码、电邮地址
  2. 从文本中快速查找具有某一规则的子字符串:如v[i!1][a@]gr[a@]可以检验出含有“伟哥”英文的各种变体,检测垃圾邮件
  3. 从文本中提取一系列子字符串:各种爬虫,格式变更

前面我们提到了Google Analytics。在GA中的数据视图过滤器、目标、细分、受众群体、内容分组和渠道分组里都可以使用正则表达式。

我们也提到了百度站长平台。在移动适配工具和改版工具中可以使用正则表达式。但是这些工具的正则表达式比较特殊,极诣今后有机会再分享。

不久前极诣的网络爬虫教程中也提到了在使用CSS Selector获取DOM元素之后再使用正则表达式将文本内容的一个片段抽离出来。事实上所有爬虫的核心思想就是正则表达式。

除了这些工具正则表达式无处不在。你或许使用过NotePad++这样的文本编辑器,与其类似的还有UltraEdit和Sublime Text这样的工具,这些工具也支持使用正则表达式进行查找替换。

图中示例查找网页源代码中的熊掌号ID
图中示例查找网页源代码中的熊掌号ID

当你在多个文件中查找替换时,这会超级方便。

学习正则表达式的相关资源

正则表达式很有用也很难。极诣写到这里,在文章的最后为读者提供一些资源。希望下面这些资源可以帮到你:

类似文章