【问题标题】:Get the right REGEX expression for mariadb query为 mariadb 查询获取正确的 REGEX 表达式
【发布时间】:2020-12-10 20:47:48
【问题描述】:

查询:

SELECT
t1.package
FROM
(
SELECT 'openstack-neutron-12.1.0-2.el7ost.noarch' AS package UNION
SELECT 'openstack-neutron-12.1.1-1.el7.noarch' AS package UNION
SELECT 'openstack-neutron-common-12.1.0-2.el7ost.noarch' AS package UNION
SELECT 'openstack-neutron-common-12.1.1-1.el7.noarch' AS package
) AS t1
WHERE t1.package REGEXP "[^openstack-neutron-´digit]"

需要:我想要前两行,我只希望主中子包,所以我想如果我过滤第二个 hifen,下一个是数字,模式就可以了。

这是马里亚布德。

有人可以帮忙吗?

编辑:'((?i)openstack-neutron-api-(?-i))\\d.*'。 这直接在 sql 客户端上工作,但我遇到了 PHP 问题(真的很奇怪) 我真的不知道 REGEX 中的字符会根据语言发生如此大的变化。

谢谢

【问题讨论】:

  • 如果不需要openstack-neutron-common-....,为什么还要选择它们?
  • 这只是一个大型数据库的虚拟示例,我有几个子查询
  • 你能展示你的PHP代码吗?
  • 我创建了另一个线程:stackoverflow.com/questions/63527380/… 原因可能与 php 有关
  • @davser - “方括号” ([]) 用于“字符类”。 “括号” (()) 用于分组。

标签: sql regex mariadb


【解决方案1】:

我会推荐:

WHERE t1.package REGEXP '^openstack-neutron-[0-9]'

^ 确保字符串以模式开头。您只需要根据您的描述寻找一位数字。

Here 是一个 dbfiddle。

【讨论】:

  • @davser 。 . .当我尝试它时它会起作用。我加了一个小提琴。
【解决方案2】:

您要查找的是第二个 - 之后的一位或更多位。您需要像这样使用 + :

SELECT
t1.package
FROM
(
SELECT 'openstack-neutron-12.1.0-2.el7ost.noarch' AS package UNION
SELECT 'openstack-neutron-12.1.1-1.el7.noarch' AS package UNION
SELECT 'openstack-neutron-common-12.1.0-2.el7ost.noarch' AS package UNION
SELECT 'openstack-neutron-common-12.1.1-1.el7.noarch' AS package
) AS t1
WHERE t1.package REGEXP "openstack-neutron-[0-9]+"

【讨论】:

  • @davser - 请更具体一些 - 它返回 0 行吗?全部 4 个?还有什么?
  • 可能应该“锚定”(^)左侧的正则表达式。 " 在此上下文中 是可选的,因为要求至少有一个数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
相关资源
最近更新 更多