针对特定模式的Oracle Regex查询

时间:2017-09-12 07:05:48

标签: regex oracle

有人可以帮我构建一个正则表达式查询,该查询从列中过滤不同模式中的以下模式。

pattern: firstName1 lastName1#firstName2 lastName2

例如:George David#William David

对于以下书面查询,我确实得到了firstName1 lastName1#firstName2 lastName2,但也带有name1#name2个模式。

查询:

select column1 from table where REGEXP_LIKE(column1, '(^|\s|\W)#($|\s|\W)');

1 个答案:

答案 0 :(得分:0)

'(^|\s|\W)#($|\s|\W)'模式匹配字符串,空格或任何非单词字符的开头,然后是#,然后是字符串的结尾,空格或任何非单词字符。你没有在这里限制上下文,基本上只是在任何未用单词字符括起的字符串中匹配#

您需要锚点和更具体的模式:

'^\w+\s+\w+#\w+\s+\w+$'

如果需要,您可以进一步调整它以允许使用撇号或连字符,将\w+更改为\w+([''-]\w+)*(1 +个字符后跟0 + '或{{1}序列跟随1个字的字符)。

<强>详情

  • - - 字符串开头
  • ^ - 一个或多个单词字符
  • \w+ - 一个或多个空格
  • \s+ - 一个或多个单词字符
  • \w+ - #
  • # - 见上文
  • \w+\s+\w+ - 字符串结束。