regex - 如何从oracle的正则表达式中排除一个单词?

标签 regex oracle

我有一些产品的表(Oracle DB):

product_1 150
product_2 250
product_1 test 150
product_3
... etc

我只想获取“product_1”的数据而不是“product_1 test”的数据 只有一个条件 .我为此使用 REGEXP_LIKE:
SELECT *
FROM TABLENAME
WHERE REGEXP_LIKE(LOWER(PRODUCT), '.*product_1.*(?!test).*')

但它不起作用并返回空结果。正则表达式的语法错误在哪里?

最佳答案

Oracle 不支持前瞻。
使用您展示的产品,您可以使用:

SELECT * FROM TABLENAME WHERE REGEXP_LIKE(PRODUCT, 'product_\d+(\s*\d+)*', 'c');

这仅基于您显示的产品名称。如果它没有捕获您想要的所有内容,请让我们更好地了解我们正在尝试匹配的内容。

另一种选择:这是一个黑客,但如果你确信“product_digits”后面不应该跟“t”,你可以使用这个:
SELECT * FROM TABLENAME WHERE REGEXP_LIKE(PRODUCT, 'product_\d+($|\s)($|[^t]).*', 'c');

关于regex - 如何从oracle的正则表达式中排除一个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23034365/

相关文章:

regex - 使用 grep 查找字符串模式

用于验证密码的正则表达式(1 个小写字母、1 个大写字母、1 个数字、无空格)

c# - 具有复合主键的 SQL 请求

java - ResultSet.getNext() 不适用于PreparedStatement

regex - 如果从 config.cfg 文件中获取,则正则表达式 Pattern 对象将转换为字符串

mysql - 如何通过正则表达式语法删除包含随机字符的字符串

PHP XML 编码正则表达式

java - Spring MVC - 使用 java 执行 Oracle 存储过程?

sql - 甲骨文 SQL : How to get xml from hierarchical table

sql - 如何获取有关 Oracle 中索引和表所有者的信息?