MySQL REGEXP格式,用于将年份范围与文本字段中的斜杠相匹配(例如:1990/93、1969/70、1975/2008等)

MySQL REGEXP格式,用于将年份范围与文本字段中的斜杠相匹配(例如:1990/93、1969/70、1975/2008等),mysql,sql,regex,Mysql,Sql,Regex,我正在尝试设计一个MySQL正则表达式,它可以匹配或不匹配文本字段中输入的日期,如下所示: 1990/93 1988/93 1969/70 1990/1996 1984/2007 1975/2008 1973/2011 2003/10 SELECT * FROM `some_objects` WHERE `date_text` REGEXP '[\/]' ; 我们的目标是匹配一个文本字段,该字段包含自由形式的、基于上面显示的日期格式的人工输入的日期。我能做的唯一一件可怜的事就是用一个简单的正

我正在尝试设计一个MySQL正则表达式,它可以匹配或不匹配文本字段中输入的日期,如下所示:

1990/93
1988/93
1969/70
1990/1996
1984/2007
1975/2008
1973/2011
2003/10
SELECT *
FROM `some_objects`
WHERE `date_text` REGEXP '[\/]'
;
我们的目标是匹配一个文本字段,该字段包含自由形式的、基于上面显示的日期格式的人工输入的日期。我能做的唯一一件可怜的事就是用一个简单的正则表达式检查斜杠,如下所示:

1990/93
1988/93
1969/70
1990/1996
1984/2007
1975/2008
1973/2011
2003/10
SELECT *
FROM `some_objects`
WHERE `date_text` REGEXP '[\/]'
;
这对我来说是相当无用的,因为这相当于“%/%”:

我不喜欢这样,因为它只是抓取任何有日期文本字段的记录,其中有一个斜杠

我要找的是一种更健壮的产品,它的工作原理如下:

1990/93
1988/93
1969/70
1990/1996
1984/2007
1975/2008
1973/2011
2003/10
SELECT *
FROM `some_objects`
WHERE `date_text` REGEXP '[\/]'
;
如果你找到一个2-4位数的数字。 数字后面跟一个/。 然后是另一个2-4位数的数字。 那就成功吧

FWIW,我已经能够在PHP中编写一些正则表达式,使用lookarounds可以很好地工作。所以我把它作为一个例子。我知道MySQL正则表达式的功能不如PHP强大,但我是否有办法在MySQL中实现与此PHP脚本相同或尽可能接近的正则表达式逻辑

// Test string including items that should not be matched.
$string = <<<EOT
1990/93
1988/93
1969/70
1990/1996
1984/2007
1975/2008
1973/2011
2003/10
2003/10
not/this
not/10this
/10never
EOT;

// One test.
$regex_pattern = '/[0-9]{4}(?:\/)[0-9]{2,4}/is';

// Another test.
$regex_pattern = '/(?<=[0-9]{4})\/(?=[0-9]{2,4})/is';

// Run it through 'preg_match_all'.
preg_match_all($regex_pattern, $string, $matches);

// Echo the results.
echo '<pre>';
print_r($matches);
echo '</pre>';
这似乎可以告诉你你想知道的:

在本例中,表达式类似于


根据,没有理由认为您在第一个php示例中所做的不适用于您的查询,尽管它与您希望它匹配的内容不完全一致:从一些对象中选择*,其中date\u text REGEXP[0-9]{2,4}/[0-9]{2,4}为什么不在插入DB之前将输入数据转换成更有用的形式?@MikeBrant,因为这是我无法控制的数据。它是数据库中的一个无法调整的自由文本字段。实际上,这会更好:。。REGEXP[0-9]{2,4}/[0-9]{2,4}?@crayon暴力”实际上这会更好:“不,不是。看看我想捕捉什么。如果一个字段有1994年,我不希望返回该字段。但是,如果该字段有1994/98,我需要该行中的项目。我知道它会像这样简单。谢谢你的澄清!这一定是今天Lenquestion/Lenanswer的高分:+1