MySQL REGEXP_SUBSTR 函数
MySQL的REGEXP_SUBSTR()函数用于模式匹配。该函数返回与给定正则表达式模式匹配的输入字符串的子字符串。如果找不到匹配项,则返回NULL。如果表达式或模式为空,则函数将返回NULL。
REGEXP_SUBSTR()函数与SUBSTRING函数相同,但是除了提取给定的子字符串外,该函数还允许我们在字符串中搜索正则表达式模式。
语法
以下是在MySQL中使用该函数的基本语法:
REGEXP_SUBSTR (expression, pattern [, position[, occurrence[, match_type]]])
参数解释
REGEXP_SUBSTR ()函数参数的解释如下:
expression: 这是一个输入字符串,我们将通过正则表达式进行搜索。
pattern: 它表示子字符串的正则表达式模式。
REGEXP_SUBSTR ()函数还使用以下可选参数:
pos: 它用于指定要在字符串内的表达式中开始搜索的位置。如果省略此参数,则从位置1开始。
occurrence: 它用于指定要搜索的匹配项的出现次数。如果省略此参数,则使用第一个出现的匹配项。
match_type: 它是一个字符串,允许我们细化正则表达式。它使用以下可能字符执行匹配。
- c: 它表示区分大小写的匹配。
- i: 它表示不区分大小写的匹配。
- E: 它用于使用子表达式提取子字符串。
- m: 它表示多行模式,它可以识别字符串内的行终止符。默认情况下,此函数在字符串的开始和结束处匹配行终止符。
- n: 它用于修改。 (点)字符以匹配行终止符。默认情况下,它将在一行的末尾停止。
- u: 它表示仅识别换行符作为.,^和$匹配运算符的Unix换行符。
让我们通过几个示例来理解它。
示例
以下语句解释了MySQL中REGEXP_SUBSTR函数的基本示例。
mysql> SELECT REGEXP_SUBSTR ('England or America', 'l.nd') AS substring;
这个语句找到了匹配项,并返回以下输出:
假设在输入字符串中找到了多个匹配项。在这种情况下,默认情况下会返回匹配子字符串的第一个出现位置。然而,我们也可以指定需要的另一个出现位置。请参见下面的语句:
mysql> SELECT REGEXP_SUBSTR ('Lend for land', 'l.nd') AS substring;
这个语句找到了匹配项,并返回了匹配子字符串的第一个出现,因为我们没有指定任何特定的出现。查看下面的输出:
如果输入字符串和模式(子字符串)字符串没有匹配项,该函数将返回NULL值。请参见下面的示例:
mysql> SELECT REGEXP_SUBSTR ('England or America', '^C') AS substring;
这是输出结果:
如果我们想通过指定起始位置来返回子字符串,我们可以使用REGEX_SUBSTR函数,如下所示:
mysql> SELECT REGEXP_SUBSTR ('dig dog dug', 'd.g', 2) AS substring;
在这个语句中,我们指定了起始位置为2。执行这个查询,我们将获得下面的输出结果,其中我们可以看到匹配子字符串的第一个位置没有返回。
让我们看另一个例子来更清楚地理解:
mysql> SELECT
REGEXP_SUBSTR('dig dog dug', 'd.g', 1) AS 'Position 1',
REGEXP_SUBSTR('dig dog dug', 'd.g', 2) AS 'Position 2',
REGEXP_SUBSTR('dig dog dug', 'd.g', 6) AS 'Position 6';
这里是输出结果:
如果我们想要指定返回匹配的子字符串的特定出现次数,可以按照以下方式使用该函数:
mysql> SELECT REGEXP_SUBSTR ('dig dog dug', 'd.g', 1, 3) AS 'Occurrence 3';
在本示例中,我们指定了匹配子字符串的起始位置为1,并且匹配子字符串的出现次数为3。因此,我们将得到以下输出:
这里是另一个例子,我们指定了起始位置为2,出现次数为1、2和3。
mysql> SELECT
REGEXP_SUBSTR ('dig dog dug', 'd.g', 2, 1) AS 'Occurrence 1',
REGEXP_SUBSTR ('dig dog dug', 'd.g', 2, 2) AS 'Occurrence 2',
REGEXP_SUBSTR ('dig dog dug', 'd.g', 2, 3) AS 'Occurrence 3';
这个函数会给出以下输出,因为起始位置在第一次出现开始之后。因此,这个函数将出现2作为出现1,将出现3作为出现2。之后没有找到更多的出现,所以出现3的结果变为NULL。
我们可以通过使用匹配类型参数来提供额外的参数来精确调整正则表达式。 例如 ,我们可以使用它来验证匹配是否区分大小写或包括行终止符。请参见下面的示例,我们正在指定大小写敏感和大小写不敏感的匹配:
mysql> SELECT
REGEXP_SUBSTR ('Dig Dog Dug', 'd.g', 1, 1, 'i') AS ' Case-Insensitive',
REGEXP_SUBSTR ('Dig Dog Dug', 'd.g', 1, 1, 'c') AS ' Case-Sensitive';
这里是输出结果: