java - Oracle Sql 中的正则表达式

标签 java sql regex oracle

我的以下 SQL 不工作,但是当我在 Java 中使用相同的正则表达式时,它工作正常

SELECT * FROM tbl WHERE REGEXP_LIKE
(MESSAGE, '^(92|0)?(3[0-9]{9})\\*([0-9]{4})\\*(([0-9]{3})|1000)$')

请帮助我做错了什么。

我正在比较以下字符串

03211234090*0000*75 

最佳答案

您的搜索模式中存在错误:\\*。这应该是 \*,因为您只需要一个 \ 来转义 *

SELECT *
FROM tbl
WHERE REGEXP_LIKE(MESSAGE, '^(92|0)?(3[0-9]{9})\*([0-9]{4})\*(([0-9]{3})|1000)$')

另一个问题是在 \*(([0-9]{3})|1000)$ 部分 - 字符串的最后部分。您提供的字符串 03211234090*0000*75 不以 0-9 或“1000”之间的三位数字结尾。

$ 表示字符串必须以紧接其前的表达式结尾。

作为解决方案,如果您的业务逻辑允许,请尝试放置 \*(([0-9]{2, 3})|1000)$。这将允许接受最后一个星号后的两位或三位数字或 1000,并检索该行。

关于java - Oracle Sql 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040030/

相关文章:

java - Spring服务器POST方法给出JSON错误,无效的UTF-8中间字节

java - 将 ICU4C 字节转换为 java 字符

java - 找不到符号 - javax.swing.JTextField.getDocument().setDocumentFilter(javax.swing.text.DocumentFilter)

sql - 按邮政编码邻近度搜索 - MySql

php - 想要获取前 9 条记录并再创建一条记录,该记录在 mysql 中为 “Others”

java - 如何杀死POJO数据控件实例?

mysql - 为行分配组号

php - 仅包含数字和一些字符的正则表达式

regex - 如何使用自定义词边界创建将获取 N 个词的 RegEx 模式?

javascript - Ext js 文本字段的正则表达式