有人可以帮我构建一个正则表达式查询,该查询从列中过滤不同模式中的以下模式。
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)');
答案 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+
- 字符串结束。