如何在字符串中返回第 n 个正则表达式匹配?
Posted
技术标签:
【中文标题】如何在字符串中返回第 n 个正则表达式匹配?【英文标题】:How can I return the nth regex match in a string? 【发布时间】:2019-05-31 20:16:10 【问题描述】:在 PL/SQL 中工作。
我有以下字符串
('Jade Court','Sarah M.', 4, '08/17/2017')
我需要编写一个正则表达式来解析'
字符之间的每个项目。例如,我需要Jade Court
、Sarah M.
、08/17/2017
等。
到目前为止,我想出了以下正则表达式:
(?<=')[^']+(?=')
正如您从下面的演示中看到的那样,到目前为止,这是通过同时找到每个必要的项目来实现的。
https://regex101.com/r/CV8evw/1
但是,我需要能够单独解析它们。有没有办法在我的正则表达式中添加一个量词,以便我可以指定我想要的匹配项?
我尝试了(?<=')[^']+(?=')1
,我希望它会返回Jade Court
,但不幸的是,它不起作用。这可能吗?
【问题讨论】:
尝试REGEXP_SUBSTR( col, '''([^'']+)''', 1, 1, NULL, 1)
,然后提取第二个REGEXP_SUBSTR( col, '''([^'']+)''', 1, 2, NULL, 1)
,以此类推
@WiktorStribiżew,是的,它有效!感谢您的建议!下面的其他答案也非常有帮助。
我发布了answer。
【参考方案1】:
您可以使用REGEXP_SUBSTR
function 并利用其nth_appearance 参数。
你可以使用的正则表达式是
'([^']+)'
它匹配'
,然后将除'
之外的任何1+ 个字符捕获到组1 中,然后匹配'
。可以通过设置为1
的sub_expression 参数访问组1 值。见regex graph:
因此,要获得第一个匹配项,您需要使用
REGEXP_SUBSTR(col, '''([^'']+)''', 1, 1, NULL, 1)
要提取第二个,请使用
REGEXP_SUBSTR(col, '''([^'']+)''', 1, 2, NULL, 1)
等等。
【讨论】:
【参考方案2】:你可以试试这个正则表达式:
/\w2,\/?\s?\w*(\/\d4)?/g
使用javascript
进行视觉测试
const x = "('Jade Court','Sarah M.', 4, '08/17/2017')"
const regex = /\w2,\/?\s?\w*(\/\d4)?/g
console.log(x.match(regex))
【讨论】:
以上是关于如何在字符串中返回第 n 个正则表达式匹配?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Perl 中的正则表达式匹配字符串中第 n 个索引处的字符/字母/符号/数字