# MatchRegEx - 脚本和图表函数

MatchRegEx() 将输入字符串与一个或多个指定的正则表达式模式进行比较，并返回匹配的正则表达式模式的数字位置。如果没有找到匹配项，函数返回 0。该函数只查找完全匹配项。

该函数执行大小写敏感的正则表达式操作。您也可以用变种 MatchRegExI() 来作为替代，执行不区分大小写的正则表达式操作。

语法：

MatchRegEx (text, regex1 [ , regex2,...regexN])

返回数据类型： 整数

参数

| 参数 | 描述 |
| --- | --- |
| text | 要匹配一个或多个正则表达式的输入字符串文本。 |
| regex | 与输入字符串匹配的正则表达式。您可以在一个表达式中指定多个正则表达式，作为后续参数分隔。 |

函数示例

| 示例 | 结果 |
| --- | --- |
| `MatchRegEx('abc123','[a-z]','[0-9]','[a-z]+[0-9]+','.+')` | 返回 `3`。第三个正则表达式模式是第一个匹配数据的模式。 |
| `MatchRegEx('ABC','[abc]+','[123]')` | 返回 `0` ，因为 MatchRegEx() 区分大小写。 |
| `MatchRegExI('ABC','[abc]+','[123]')` | 返回 `1`。使用不区分大小写的函数变体，MatchRegExI()。 |

## 适用场景

该函数的用例包括：

* 验证文本是否符合格式和合规标准，并找出数据中的错误。

* 识别文本格式的差异。例如，您可以确定有多少电话号码使用格式 A、格式 B 等。

## 例 1 - 分析电话号码格式的加载脚本

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/MatchRegEx.htm)

#### 加载脚本和结果

概览

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 表格 `BusinessContactInfo` 包含各种企业的联系电话号码。电话号码是 10 位数的 NANP 电话号码。

* 已计算字段 `PhoneNumberFormat`，用于评估每个电话号码是否与一组特定的电话号码格式之一相匹配。

我们要检查三种不同的格式：(###) ###-####、###-###-#### 和 ##########。

加载脚本

```
BusinessContactInfo:

Load MatchRegEx(ContactInfo,'\({0,1}[0-9]{3}\) [0-9]{3}-[0-9]{4}', '[0-9]{3}-[0-9]{3}-[0-9]{4}', '[0-9]{10}') as PhoneNumberFormat,
* Inline `
ID	CompanyName	ContactInfo
1	Company A	(123) 456-7890
2	Company B	0123456790
3	Company C	234-567-8901
4	Company D	(024) 680-2456
5	Company E	(135) 791-3579
6	Company F	8901234567
7	Company G	235-235-2352
8	Company H	(555) (555) (5555)
9	Company I	2342342343
10	Company J	444-444-4444
` (delimiter is '\t');
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `CompanyName`

* `ContactInfo`

* `PhoneNumberFormat`

结果表

| CompanyName | ContactInfo | PhoneNumberFormat |
| --- | --- | --- |
| Company A | (123) 456-7890 | 1 |
| Company B | 0123456790 | 3 |
| Company C | 234-567-8901 | 2 |
| Company D | (024) 680-2456 | 1 |
| Company E | (135) 791-3579 | 1 |
| Company F | 8901234567 | 3 |
| Company G | 235-235-2352 | 2 |
| Company H | (555) (555) (5555) | 0 |
| Company I | 2342342343 | 3 |
| Company J | 444-444-4444 | 2 |

例如，您可以从这里创建 KPI，计算每种电话号码格式的总数，以及没有公认格式的电话号码数量：

计算每种格式出现次数的汇总表达式示例

| 格式 | 实例数 | 图表表达式 |
| --- | --- | --- |
| (###) ###-#### | 3 | =Count({&lt;PhoneNumberFormat={'1'}&gt;} PhoneNumberFormat) |
| ###-###-#### | 3 | =Count({&lt;PhoneNumberFormat={'2'}&gt;} PhoneNumberFormat) |
| ########## | 3 | =Count({&lt;PhoneNumberFormat={'3'}&gt;} PhoneNumberFormat) |
| Unrecognized format | 1 | =Count({&lt;PhoneNumberFormat={'0'}&gt;} PhoneNumberFormat) |

## 例 2 - 识别 ISBN 格式的图表表达式

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/MatchRegEx.htm)

#### 图表表达式和结果

概览

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 表格 `Books` 列出了各种书籍的 ISBN 代码。

我们希望根据正则表达式模式中指定的语法，从这些数据中识别每个 ISBN 代码是有效的 10 位数代码还是 13 位数代码。

加载脚本

```
Books:

Load * Inline [
Book
ISBN 123-3-1234-1234-0
ISBN 012-2-0123-0123-4
ISBN 000-1-0123-0123-2
ISBN 0-111-23456-7
ISBN 555-2-5555-5555-3
ISBN 222-4-2222-2222-2
ISBN 1-901-23456-8
ISBN 333-3-3333-3333-3
ISBN 555-1-5151-5151-3
ISBN 232-1-2323-2323-1
ISBN 2-444-44444-4
ISBN 888-0-9999-0000-0
];
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

* `Book`

添加此计算维度，并将其标注为 ISBN Format：

```
=if(MatchRegEx(Book, 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})', 'ISBN[ ]*([0-9]{1})-([0-9]{3})-([0-9]{5})-([0-9]{1})')=1, '13-digit', 
	if(MatchRegEx(Book, 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})', 'ISBN[ ]*([0-9]{1})-([0-9]{3})-([0-9]{5})-([0-9]{1})')=2, '10-digit',
		'Invalid ISBN'))
```

结果表

| Book | ISBN Format |
| --- | --- |
| ISBN 000-1-0123-0123-2 | 13-digit |
| ISBN 0-111-23456-7 | 10-digit |
| ISBN 1-901-23456-8 | 10-digit |
| ISBN 2-444-44444-4 | 10-digit |
| ISBN 012-2-0123-0123-4 | 13-digit |
| ISBN 123-3-1234-1234-0 | 13-digit |
| ISBN 222-4-2222-2222-2 | 13-digit |
| ISBN 232-1-2323-2323-1 | 13-digit |
| ISBN 333-3-3333-3333-3 | 13-digit |
| ISBN 555-1-5151-5151-3 | 13-digit |
| ISBN 555-2-5555-5555-3 | 13-digit |
| ISBN 888-0-9999-0000-0 | 13-digit |

## 了解详情

* [在加载脚本和图表表达式中使用正则表达式](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)