Postgresql 9:使用正则表达式进行子字符串截取以获取位于字符串和管道之间的字符串

3
我需要使用Postgresql 9.x中的SUBSTRING函数创建一个查询来提取字符串和第一个管道符号之间的子字符串。
我的源字符串类似于这样:
THIS IS MY EXAMPLE|OTHER EXAMPLE|HELLO: Kevin|OTHER EXAMPLE|OTHER EXAMPLE

所以我创建了这个查询:

SELECT SUBSTRING(myField from 'HELLO: (.*)\|') AS test FROM myTable

我想要在字符串'HELLO: '和第一个竖线字符之间获取单词Kevin,但是它并没有按照预期工作,因为它返回了Kevin|OTHER EXAMPLE|OTHER EXAMPLE

我做错了什么?


1
尝试使用 HELLO: ([^|]+),例如 SELECT SUBSTRING(myField from 'HELLO: ([^|]+)') AS test FROM myTable - Wiktor Stribiżew
太好了!非常感谢!!! - Diaboliko
你的模式几乎正确,你只需要理解 *贪婪的。你可以使用它的非贪婪(懒惰)对应:*?,例如 'HELLO: (.*?)\|'(在 PostgreSQL 中也适用)。 (当然,发布的答案也是正确的,你也可以通过改变模式逻辑来避免贪婪。) - pozs
我的建议最后起作用了吗?如果你在这个问题上还需要更多帮助,请告诉我。 - Wiktor Stribiżew
1个回答

5

为了避免“溢出”到下一个以|分隔的部分,您需要使用否定字符类:

SELECT SUBSTRING(myField from 'HELLO: ([^|]+)') AS test FROM myTable

这是一个关于如何使用正则表达式的演示。模式[^|]+匹配一个或多个非管道符号的字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接