MySQL 中的 REGEXP_SUBSTR() 函数用于模式匹配。此函数返回输入字符串中与给定正则表达式模式匹配的子字符串。如果没有找到匹配项,它将返回 NULL。如果表达式或模式为 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:它表示识别字符串中的行终止符的 multiple-line 模式。默认情况下,此函数匹配字符串开头和结尾的行终止符。
- n:它用于修改 . (点)字符来匹配行终止符。默认情况下,它会停在一行的末尾。
- u:它表示 Unix-only 行尾,仅通过 .、^ 和 $匹配运算符识别换行符。
让我们通过各种例子来理解它。
示例
以下语句解释了 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';
这是输出:
相关用法
- MySQL REGEXP_INSTR()用法及代码示例
- MySQL REGEXP_REPLACE()用法及代码示例
- MySQL REPEAT()用法及代码示例
- MySQL REPLACE()用法及代码示例
- MySQL REVERSE()用法及代码示例
- MySQL ROUND()用法及代码示例
- MySQL RPAD()用法及代码示例
- MySQL ROW_NUMBER()用法及代码示例
- MySQL RIGHT()用法及代码示例
- MySQL RADIANS()用法及代码示例
- MySQL RAND()用法及代码示例
- MySQL RTRIM()用法及代码示例
- MySQL POWER()用法及代码示例
- MySQL LEAD() and LAG()用法及代码示例
- MySQL IS_IPV4()用法及代码示例
- MySQL WEEK()用法及代码示例
- MySQL CHARACTER_LENGTH()用法及代码示例
- MySQL CURTIME()用法及代码示例
- MySQL weekofyear()用法及代码示例
注:本文由纯净天空筛选整理自 MySQL REGEXP_SUBSTR() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。