Oracle:使用正则表达式从查询中排除结果

Posted

技术标签:

【中文标题】Oracle:使用正则表达式从查询中排除结果【英文标题】:Oracle: Exclude Results From Query Using a Regular Expression 【发布时间】:2010-06-28 20:36:36 【问题描述】:

使用 linq (.net 3.5 +) 和 predicate builder,我是这样做的:

var startsWith3Chars = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z]3\-", System.Text.RegularExpressions.RegexOptions.Compiled);
wherePredicate = wherePredicate.And(x => startsWith3Chars.Matches(x.MATERIALUID).Count > 0);

但现在我需要在命令文本中进行过滤。

有没有办法使用 REGEXP_INSTR 之类的东西来限制基于正则表达式的结果?

【问题讨论】:

【参考方案1】:

鉴于此测试数据...

SQL> select name
  2  from t23
  3  /

NAME
----------
SAM-I-AM
MR KNOX
X11
CAT
LORAX

SQL>

...以下查询使用 REGEXP_LIKE() 返回前四个字符仅包含字母或连字符的记录:

SQL> select name
  2  from t23
  3  where regexp_like(name, '^[[:alpha:]\-]4')
  4  /

NAME
----------
SAM-I-AM
LORAX

SQL>

我们也可以使用具有相同基本模式的 REGEXP_INSTR()(我已经删除了前导插入符):

SQL> select name
  2  from t23
  3  where regexp_instr(name, '[[:alpha:]\-]4', 1) = 1
  4  /

NAME
----------
SAM-I-AM
LORAX

SQL>

Oracle 在 10g 版本中为其 SQL 添加了完整的正则表达式支持。 Find out more.

【讨论】:

不幸的是使用旧版本的 Oracle。不过谢谢,正是我想要的。【参考方案2】:

REGEXP_LIKE怎么样?

【讨论】:

APC sort of 1 举了一个例子。感谢您的回复。 没问题 - 如果 APC 有时间提供示例,那么功劳应该去那里。如果您急需这些信息,那么我提供的信息会让您到达那里。一切都是关于解决方案,而不是评分。

以上是关于Oracle:使用正则表达式从查询中排除结果的主要内容,如果未能解决你的问题,请参考以下文章

通过 Oracle 的 REGEXP_SUBSTR 排除正则表达式中的一系列字符

基于正则表达式排除 Mongo 字段

oracle10g中,如何查询正则表达式匹配指定字符串的匹配个数?

Oracle 使用带有 oracle regexp_substr 的正则表达式提取 json 字段

Perl 正则表达式 |如何从文件中排除单词

Oracle 正则表达式匹配