如何返回字符串中的第n个正则表达式匹配项?

时间:2019-05-31 20:16:10

标签: regex plsql

使用PL / SQL。

我有以下字符串

('Jade Court','Sarah M.', 4, '08/17/2017')

我需要编写一个正则表达式,可以解析'字符之间的每个项目。例如,我需要Jade CourtSarah M.08/17/2017等。

到目前为止,我已经提出了以下正则表达式:

(?<=')[^']+(?=')

从下面的演示中可以看到,到目前为止,这可以通过同时查找每个必需项来实现。

https://regex101.com/r/CV8evw/1

但是,我需要能够分别解析它们。有没有一种方法可以在我的正则表达式中添加量词,以便我可以指定想要的匹配项?

我尝试了(?<=')[^']+(?='){1},我希望它能返回Jade Court,但不幸的是这没有用。这可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用REGEXP_SUBSTR function并利用其 nth_appearance 参数。

您可能使用的正则表达式是

'([^']+)'

它与'匹配,然后将除'之外的任意1个以上的字符捕获到组1中,然后匹配'。可以通过设置为1 sub_expression 参数访问组1的值。参见regex graph

enter image description here

因此,要获得第一个匹配项,您需要使用

REGEXP_SUBSTR(col, '''([^'']+)''', 1, 1, NULL, 1)

要提取第二个,请使用

REGEXP_SUBSTR(col, '''([^'']+)''', 1, 2, NULL, 1)

以此类推。

答案 1 :(得分:1)

您可以尝试此正则表达式:

/\w{2,}\/?\s?\w*(\/\d{4})?/g

使用javascript

进行视觉测试

const x = "('Jade Court','Sarah M.', 4, '08/17/2017')"

const regex = /\w{2,}\/?\s?\w*(\/\d{4})?/g

console.log(x.match(regex))