【发布时间】:2018-02-16 14:35:46
【问题描述】:
在我的一生中,我无法用 Perl 语法来解决这个问题。我已经设法让这种风格在 Javascript 中工作,其中 N 是匹配号。
^(?:[^\|]*\|){N}([^\|]*)
我也尝试过匹配任何不是管道的东西,但是我似乎无法编写正则表达式来提取我需要的 Perl 风格的匹配索引。有什么指点吗?
数据看起来像这样
字符串|另一个字符串|测试|也许更多的文本
当第一个正则表达式在正则表达式调试器中运行时,它会产生这个(这是我想要运行的)。
^(?:[^\|]*\|){0}([^\|]*) produces 'astring'
^(?:[^\|]*\|){3}([^\|]*) produces 'maybe some more text'
但是,当我在 Netezza(Perl Regex,这是我需要它运行的地方)中运行它时,它会产生:
^(?:[^\|]*\|){0}([^\|]*) produces 'astring'
^(?:[^\|]*\|){3}([^\|]*) produces 'astring| another string|test|maybe some more text'
更新: 问题解决了 正则表达式没问题,但是我是个笨蛋,没有正确使用 Netezza 中的函数。这导致了正则表达式的过度复杂化。下面的例子 REGEXP_EXTRACT(column, '[^\|]+',1 ,4 )
【问题讨论】:
-
你到底想做什么?
-
如果我尝试你的正则表达式,我在捕获组中得到了你想要的,那有什么问题呢? regex101.com/r/w2V2sK/1
-
抱歉,如果不清楚。我已经更新了我的问题
-
还是不明白问题出在哪里,你要的部分还是存放的是第一个捕获组。你应该能够得到你想要的,存储到变量 $1 中。如果你不明白我在说什么,请点击我之前评论中的链接;)
-
也许这就是我运行查询的方式