正则表达式
|
收藏
神策分析各项功能均支持正则表达式,用户可以利用正则表达式进行灵活的属性筛选。
正则表达式是对字符串进行操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
1. 例子
神策官网设有 文档 频道,该频道下的页面地址示例如下:
- 介绍页面:https://www.sensorsdata.cn/manual/
- 功能介绍:https://www.sensorsdata.cn/manual/features.html
- 事件分析:https://www.sensorsdata.cn/manual/event_ana.html
可以看到,文档频道下的页面地址有个规律,即均以https://www.sensorsdata.cn/manual/ 开头。
所以,当我们想要看文档频道下的整体页面浏览数时,可用如下用正则表达式进行匹配:
/manual/.*
2. 正则表达式语法
上述表达式中的 .
和 *
是正则表达式中所使用的特殊字符中的两个。其他正则表达式字符释义如下:
2.1. 通配符
字符 | 含义 | 示例 |
---|---|---|
. | 匹配任何单个字符 | sens.ors 与 sensoors 、sens8ors 匹配 |
* | 匹配0个或多个先前项 | 默认的先前项是前一个字符。sens*ors 与 senors 、senssors 匹配 |
+ | 与星号的用法一样,只不过加号至少必须匹配一个先前项 | sens+ors 与 senssors 匹配,但是与 senors 不匹配 |
? | 匹配0个或1个先前项 | labou?r 与 labor 和 labour 匹配 |
∣ | 执行“或”匹配 | a∣b 匹配 a 或 b |
2.2. 定位符
字符 | 含义 | 示例 |
---|---|---|
^ | 要求您的数据位于字段开头 | ^sensors 与 sensors 匹配,与 mysensors 不匹配 |
$ | 要求您的数据位于字段末尾 | sensors$ 与 sensors 匹配,与 sensorscan 不匹配 |
2.3. 分组
字符 | 含义 | 示例 |
---|---|---|
() | 使用圆括号创建项,而不使用默认项 | Thank(s∣you) 与 Thanks 和 Thankyou 都匹配 |
[] | 使用方括号创建要匹配的项列表 | [abc] 匹配 a 、b 和 c |
- | 使用方括号和短划线来扩展您的列表 | [A-Z] 表示英语大写字母的列表 |
2.4. 转义
字符 | 含义 | 示例 |
---|---|---|
\ | 将正则表达式字符转换为普通字符 | sensorsdata\.cn 这一表达式中的. 不再是通配符 |
其他更多 正则表达式语法,请参考:
3. 用户 ID 正则表达式
3.1. 作用
在神策分析 1.17 及之后版本中,神策提供了可以通过设定上传数据时的 distinct_id 的值是否符合特定规则,限制上报的数据是否可以正常入库。该功能可以有效的提升数据准确性,从根源解决错误数据上报入库的问题。
distinct_id 是神策数据上报时,标识用户的必要字段,distinct_id 取值规则分为「设备 ID」和「登录 ID」,具体取值规则可参考神策的用户标识文档。
注意:如果设置 distinct_id 的正则表达式规则错误,与实际上传数据的 distinct_id 值不符合,会导致数据无法入库。因此使用该功能时需谨慎操作。在使用该功能之前,务必要和神策值班同学确认使用场景。
3.2. 使用说明
神策支持多种数据导入来源,包含客户端 SDK、服务端 SDK、神策提供的各种导入工具导入数据。目前仅可以对客户端 SDK(包含 Android SDK、iOS SDK、JS SDK、各种小程序 SDK) 以「设备 ID」标记的数据,和所有导入数据来源端以「登录 ID」标记的数据设置 distinct_id 的入库规则。
通常情况下,服务端 SDK 和神策提供的各种导入工具上传的数据,一般是以「登录 ID」上报的。对于没有设置「设备 ID」或「登录 ID」校验规则的来源端数据,则可以直接入库。比如服务端 SDK 以一个「设备 ID」上传数据时,由于对服务端 SDK 没有设置「设备 ID」校验规则,则在满足其他数据检验格式的情况下,数据可以直接入库。
3.3. 常见的「设备 ID」和「登录 ID」正则表达式举例
下表根据神策客户端 SDK 常用的「设备 ID」样式和常见的「登录 ID」样式,举例写出对应的正则表达式。更多 ID 样式的正则表达式,请参考正则表达式的规则介绍,自行实现。
客户端类型 | ID 分类 | ID 规则 | ID 样式 | ID 取值时机 | ID 对应的正则表达式 | 各端 SDK 设备 ID/登录 ID正则表达式 |
---|---|---|---|---|---|---|
Android SDK | Android ID | 正常是 16 位字符(0~9,a~f)(不排除少量手机供应商产生 15,14,13 位的 Android ID ,因此本例中,暂定 Android ID 字符个数为 1~16 位) | 774d56d682e549c | Android SDK 默认的匿名 ID | ^([0-9a-z]{1,16})$ | ^([0-9a-z]{1,16})$|^([0-9a-z]{8})(([/\s-][0-9a-z]{4}){3})([/\s-][0-9a-z]{12})$ |
UUID | 8-4-4-4-12 每一位都是十六进制的数字(0~9,a~f),只有小写字母 | 550e8400-e29b-41d4-a716-446655440000 | Android SDK ,在获取不到 Android ID ,或者 Android SDK 在 1.10.5 版本之前时,默认获取的匿名 ID | ^([0-9a-z]{8})(([/\s-][0-9a-z]{4}){3})([/\s-][0-9a-z]{12})$ | ||
iOS SDK | IDFA | 8-4-4-4-12 每一位都是十六进制的数字(0~9,A~F),只有大写字母 | DA067C52-8D48-49CE-9500-5A01368B8859 | iOS SDK 默认获取的匿名 ID | ^([0-9A-Z]{8})(([/\s-][0-9A-Z]{4}){3})([/\s-][0-9A-Z]{12})$ | ^([0-9A-Z]{8})(([/\s-][0-9A-Z]{4}){3})([/\s-][0-9A-Z]{12})$ |
IDFV | 8-4-4-4-12 每一位都是十六进制的数字(0~9,A~F),只有大写字母 | DA067C52-8D48-49CE-9500-5A01368B8859 | iOS SDK ,在取不到 IDFA 时,尝试取 IDFV 作为匿名 ID | |||
UUID | 8-4-4-4-12 每一位都是十六进制的数字(0~9,A~F),只有大写字母 | DA067C52-8D48-49CE-9500-5A01368B8859 | iOS SDK,在取不到 IDFA、IDFV 时,分配一个 UUID 作为匿名 ID | |||
JS SDK | cookie id | n-n-n-n-n 共 5 段,每一位都是十六进制的数字(0~9,a~f),n 的个数不固定(预计在 5~25 个) | 16e39c2c8b999e-05ae1754c671f3-38607701-2073600-16e39c2c8ba85c | 网页端默认的匿名 ID | ^([0-9a-z]{5,})(([/\s-][0-9a-z]{5,}){4})$ | ^([0-9a-z]{5,})(([/\s-][0-9a-z]{5,}){4})$ |
小程序(各种小程序 SDK ) | uuid | 13-n-n-n (第一段是 13 位的时间戳,后面 3 端位数不固定,均是数字和小写字母组成) | 1558509239724-9278730-00c1875d5f63f8-41373096 | 所有小程序默认的匿名 ID 为 uuid | ^([0-9]{13})(([/\s-][0-9a-z]{1,}){3})$ | ^([0-9]{13})(([/\s-][0-9a-z]{1,}){3})$|^o[0-9a-zA-Z_-]{27}$|^o[0-9a-zA-Z_-]{28}$ |
微信小程序 | openid | 小写字母 o 开头,由数字,大小写字母,下划线,横杠组成,共 28 个字符 | oB4nYjnoHhuWrPVi2pYLuPjnCaU0 | 微信小程序可以设置使用 openid 为匿名 ID | ^o[0-9a-zA-Z_-]{27}$ | |
微信小程序 | unionid | 小写字母 o 开头,由数字,字母,下划线,横杠组成,共 29 个字符 | oJeaRw70h8MKiI3IQuFPJlsZzvTEF | 用户可以获取 unionid 作为微信小程序的匿名 ID 或者登录 ID | ^o[0-9a-zA-Z_-]{28}$ | |
登录 ID(本文仅举例说明一些登录 ID 样式,具体的规则请以业务中实际使用的登录 ID 规则为准) | 纯数字登录 ID | 纯数字,由 0 递增(0~6666666) | 12345 | 客户自定义的登录 ID 规则 | ^\d+$ (验证纯数字字符串) ^[0-9]*$ (验证纯数字字符串) ^\d{n}$ (验证 n 位数字,n 输入具体的值) | ^\d+$ |
字母+数字登录 ID | 数字+字母自由组合 | u123f56 | 客户自定义的登录 ID 规则 | ^[0-9a-zA-Z]{n,m}$ (n ~m 个数字、字母组成的字符串) | ^[0-9a-zA-Z]{n,m}$ | |
纯字母的登录 ID | 纯字母 | qazwsx | 客户自定义的登录 ID 规则 | ^[a-zA-Z]{n,m}$ (n ~m 个字母组成的字符串) | ^[a-zA-Z]{n,m}$ | |
邮箱作为登录 ID | 邮箱(不包含中文字符的邮箱) | shence@sensorsdata.cn test123@ss.ss.ss test1-23@s-_s.ss.ss | 邮箱格式包含【(数字、大小写、下划线、横杠、点)@(数字、大小写、下划线、横杠、点)】长度不限 | ^([A-Za-z0-9_\-\.])+\@[a-zA-Z0-9_\-]+([a-zA-Z0-9_\-\.])+$ | ^([A-Za-z0-9_\-\.])+\@[a-zA-Z0-9_\-]+([a-zA-Z0-9_\-\.])+$ |
针对以上部分正则表达式含义解释如下
表达式 | 含义 |
---|---|
[0-9a-zA-Z_-]{27} | 27 个字符,每个字符由 0~9 、a~z 26 个小写字母、A~Z 26 个大写字母、下划线 _ 、横杠 - 组成 |
$ | 标识以这个字符结尾 |
^ | 表示以某个字符开头 |
注意:
(1)如果某客户端 SDK 的「设备 ID」取值有多种可能,请务必在正则表达式中以「或」的关系写入。
(2)对于「登录 ID」因各家产品的 ID 规则不同,此处需要你自己使用正则表达式来定义「格式规则」,可参考此文档进行正则表达式的编写,确定规则后,请联系神策同学协助你确认正则表达式的正确性。如当前项目中存在多个产品,其「登录 ID」格式规则各不相同,请务必在正则表达式中以「或」的关系写入,如果只描述了一个组规则,有可能造成其他产品的用户数据无法正常入库。
注:本文档内容为神策产品使用和技术细节说明文档,不包含适销类条款;具体企业采购产品和技术服务内容,以商业采购合同为准。