菜单

正则表达式

神策分析各项功能均支持正则表达式,用户可以利用正则表达式进行灵活的属性筛选。

正则表达式是对 字符串 进行操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个 规则字符串,这个 规则字符串 用来表达对 字符串 的一种过滤逻辑。

例子

神策官网设有 文档 频道,该频道下的页面地址示例如下:

  • 介绍页面: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/.*

正则表达式语法

上述表达式中的 . 和 * 是正则表达式中所使用的特殊字符中的两个。其他正则表达式字符释义如下:

通配符

字符 含义 示例
. 匹配任何单个字符 sens.ors 与 sensoors、sens8ors 匹配
* 匹配 0 个或多个先前项 默认的先前项是前一个字符。sens*ors 与 senors、senssors 匹配
+ 与星号的用法一样,只不过加号至少必须匹配一个先前项 sens+ors 与 senssors 匹配,但是与 senors 不匹配
? 匹配 0 个或 1 个先前项 labou?r 与 labor 和 labour 匹配
∣ 执行“或”匹配 a∣b 匹配 a 或 b

定位符

字符 含义 示例
^ 要求您的数据位于字段开头 ^sensors 与 sensors 匹配,与 mysensors 不匹配
$ 要求您的数据位于字段末尾 sensors$ 与 sensors 匹配,与 sensorscan 不匹配

分组

字符 含义 示例
() 使用圆括号创建项,而不使用默认项 Thank(s∣you) 与 Thanks 和 Thankyou 都匹配
[] 使用方括号创建要匹配的项列表 [abc] 匹配 a、b 和 c
- 使用方括号和短划线来扩展您的列表 [A-Z] 表示英语大写字母的列表

转义

字符 含义 示例
\ 将正则表达式字符转换为普通字符 sensorsdata\.cn 这一表达式中的 . 不再是通配符

其他更多正则表达式语法,请参考:

Google/re2 正则表达式语法

用户 ID 正则表达式

作用

在神策分析 1.17 及之后版本中,神策提供了可以通过设定上传数据时的 distinct_id 的值是否符合特定规则,限制上报的数据是否可以正常入库。该功能可以有效的提升数据准确性,从根源解决错误数据上报入库的问题。

distinct_id 是神策数据上报时,标识用户的必要字段,distinct_id 取值规则分为 设备 ID 和 登录 ID,具体取值规则可参考神策的用户标识文档。

注意:如果设置 distinct_id 的正则表达式规则错误,与实际上传数据的 distinct_id 值不符合,会导致数据无法入库。因此使用该功能时需谨慎操作。在使用该功能之前,务必要和神策值班同学确认使用场景。

使用说明

神策支持多种数据导入来源,包含客户端 SDK、服务端 SDK、神策提供的各种导入工具导入数据。目前仅可以对客户端 SDK(包含 Android SDK、iOS SDK、JS SDK、各种小程序 SDK)以 设备 ID 标记的数据,和所有导入数据来源端以 登录 ID 标记的数据设置 distinct_id 的入库规则。

通常情况下,服务端 SDK 和神策提供的各种导入工具上传的数据,一般是以 登录 ID 上报的。对于没有设置 设备 ID 或 登录 ID 校验规则的来源端数据,则可以直接入库。比如服务端 SDK 以一个 设备 ID 上传数据时,由于对服务端 SDK 没有设置 设备 ID 校验规则,则在满足其他数据检验格式的情况下,数据可以直接入库。

常见的 设备 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
oB4nYjhJHQVaD0PL7qs0W1kL-_ls
oB4nYjvY13SVtaWC-AFztM2f3TlU
微信小程序可以设置使用 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}$
^\d+$
字母+数字登录 ID 数字+字母自由组合 u123f56 客户自定义的登录 ID 规则 ^[0-9a-zA-Z]{n,m}$ ^[0-9a-zA-Z]{n,m}$
纯字母的登录 ID 纯字母 qazwsx 客户自定义的登录 ID 规则 ^[a-zA-Z]{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 格式规则各不相同,请务必在正则表达式中以「或」的关系写入,如果只描述了一个组规则,有可能造成其他产品的用户数据无法正常入库。
上一个
查询抽样
下一个
大数据查询常用功能
最近修改: 2025-03-10