正则表达式:字符串中重复相同的元音 - Oracle SQL
Posted
技术标签:
【中文标题】正则表达式:字符串中重复相同的元音 - Oracle SQL【英文标题】:RegEx: Repeated identical vowels in a string - Oracle SQL 【发布时间】:2015-04-05 03:39:55 【问题描述】:我只需要在 Oracle11g 中显示那些包含 2 个或更多相同元音的字符串(制造商名称)。我正在使用正则表达式来查找它。
SELECT manuf_name "Manufacturer", REGEXP_LIKE(manuf_name,'([aeiou])\2') Counter FROM manufacturer;
例如: RegEx 接受
OtterBox
Abca
abcA
RegEx 拒绝
Samsung
Apple
我不确定如何继续。
【问题讨论】:
我对 Oracle11g 不熟悉,但是如果有人帮助你,他们会想知道如果你的字符串同时包含OtterBox
和 Samsung
会发生什么|| Apple
。拒绝还是接受?
我没有看到您发布的输出(和被拒绝的字符串)有问题。当您说“2 个或更多相同的元音”时,您是否反对 Otterbox
中的 O
和 o
不是相同的情况,因此在技术上是“相同的”?祝你好运。
@Jonathan - Otterbox 被接受,因为元音 'o' 出现两次。检查需要不区分大小写。我已经更新了问题以提供更清晰的信息。
【参考方案1】:
我想你想要这样的东西:
WITH mydata AS (
SELECT 'OtterBox' AS manuf_name FROM dual
UNION ALL
SELECT 'Apple' FROM dual
UNION ALL
SELECT 'Samsung' FROM dual
)
SELECT * FROM mydata
WHERE REGEXP_LIKE(manuf_name, '([aeiou]).*\1', 'i');
我不确定您为什么使用 \2
作为反向引用而不是 \1
-- \2
没有引用此正则表达式中的任何内容。另外,请注意通配符和量词.*
表示在元音的第一次出现和第二次出现之间可以有任意数量的任意字符。第三,注意'i'
参数表示不区分大小写的搜索(我认为这是你想要的,因为你说正则表达式应该匹配“OtterBox”)。
SQL Fiddle here.
【讨论】:
我看到你的小提琴确实可以工作,但是那个正则表达式在正则表达式测试器中对我不起作用。谁能解释一下? 可能是 POSIX ERE 正则表达式(由 Oracle 使用)和您在测试器中使用的任何正则表达式引擎之间的区别。 我现在明白了,看过你的正则表达式。您希望正则表达式捕获整个制造商名称。这里不需要,我只关心它是否匹配。 啊,现在说得通了。【参考方案2】:David 你的对我来说不太好用。这个呢?
\w*([aeiou])\w*\1+\w*
https://regex101.com/r/eE3iC2/3
编辑:根据建议更新一个:
.*([aeiou]).*\1.*
https://regex101.com/r/eE3iC2/5
【讨论】:
好吧,如果他们混合大小写,这将不起作用(因此它将匹配 otterbox,但不匹配 Otterbox)。我试图弄清楚。编辑:现在修复。 上述内容不适用于Otter Box
之类的内容,因为您没有考虑非单词字符。 regex101.com/r/eE3iC2/4
两件事,你不需要后向引用后的量词(你在捕获组中匹配了一次字符,你只需要再匹配一次,你会想要一个通配符而不是单词字符类。
谢谢,现在应该修好了。以上是关于正则表达式:字符串中重复相同的元音 - Oracle SQL的主要内容,如果未能解决你的问题,请参考以下文章