【问题标题】:REGEXP in MySQL Return unwanted valueMySQL 中的 REGEXP 返回不需要的值
【发布时间】:2011-03-07 16:06:34
【问题描述】:

我在 Mysql 中使用 REGEX 时遇到问题

我在这样的数据库中有 oid 值

id -> 值

1.3.6.1.4.1 -> 值一个

1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1 -> 值 b

1.3.6.1.4.1.2499 -> 值 c

我的目标是 1. 使用我放入 sql 语句的特定 oid 获取单个 oid 和值 2.如果没有具体的值,则将oid编号逐个反转,直到找到新的剩余值

例如 如果我使用 [从表名中选择 id,其中 '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1' REGEXP oid] 它应该只返回 1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1 但上面的 sql 将返回所有结果

如果我使用 [select id from tablename where '1.3.6.1.4.1.24999999.5' REGEXP oid] 它应该只返回 1.3.6.1.4.1 但 它返回 1.3.6.1.4.1 和 1.3.6.1.4.1.2499

如果我使用 从表名中选择 id where '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.100' REGEXP oid 它应该只返回 1.3.6.1.4.1.2499 但它返回所有 id

我对这个 REGEXP 不是很熟悉。谁能帮我解决这个问题。 谢谢

【问题讨论】:

    标签: java regex mysql


    【解决方案1】:

    对于 MySQL,你应该使用field REGEXP value,像这样:

    select id from tablename where oid REGEXP '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1'
    

    . 必须用 \ 转义
    要匹配整行,请使用^$

    select id from tablename where oid REGEXP '^1\.3\.6\.1\.4\.1\.2499\.1\.1\.2\.1\.1\.1\.1\.1$'
    

    我不明白,当你可以通过LIKE 选择时,你为什么要使用REGEXP,因为你不使用正则表达式进行搜索。

    【讨论】:

    • 谢谢。解决 1 个问题,但如果我喜欢这个 select id from tablename where oid REGEXP '^1\.3\.6\.1\.4\.1\.2499\.1\.1\.2\.1 \.1\.1\.1\.100$',它应该返回 1.3.6.1.4.1.2499 我不使用 LIKE 因为它不能得到“1.3.6.1.4.1.2499”——>这是最接近的答案在数据库中。
    • 这行得通吗? select id from tablename where oid REGEXP '^1\.3\.6\.1\.4\.1\.2499(\.1\.1\.2\.1\.1\.1\.1\.100)?$'
    • 是的……它正在工作……不幸的是我不知道我们应该把括号放在哪里。它是动态的。为你点赞 2 个!
    • 取决于代码是什么规则:也许你应该把它放在第六个.之后
    【解决方案2】:

    我不认为正则表达式是适合这项工作的工具。

    相反,我会遍历输入字符串,将其视为以句点分隔的列表。

    将列表与 oid 匹配。如果零匹配,则删除最后一个列表元素。重复。

    【讨论】:

      猜你喜欢
      • 2018-04-20
      • 2021-04-16
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多