是否可以匹配字符串中所有出现的模式,具有给定的开始和结束? [复制]

Posted

技术标签:

【中文标题】是否可以匹配字符串中所有出现的模式,具有给定的开始和结束? [复制]【英文标题】:It's possible to match all ocurrences of a pattern inside string, with a given start and end? [duplicate] 【发布时间】:2020-04-10 19:45:04 【问题描述】:

我需要得到

first="john"
second="doe"

firstz="johnz"
secondz="doez"

来自此文本:

any text here [link first="john" second="doe"] anytexthere [link firstz="johnz" secondz="doez"]

pattern需要得到[link开头,]结尾,里面可以有多个属性...

[link first="john" second="doe"] ✅ -> first="john", second="doe"
[lin first="john" second="doe" ❌
[link first="john second="doe"] ❌
[linksecond="doe"] ❌

Obs:“first”、“john”、“second”、“doe”可以是任何东西。

这是我最好的尝试: https://regex101.com/r/cJnYIF/1

\[link (\w+="\w+")\]

但这只会捕获第一个

我也尝试过积极的向后看,但没有成功 https://regex101.com/r/jnk6gM/397

有人知道如何解决这个问题吗?可以的话XD

【问题讨论】:

您需要使用积极的回溯。但是积极的lookbehinds不允许使用量词,所以它不起作用。 最好的一个是 .NET 正则表达式和 PyPi Python 正则表达式库,您可以在其中访问每个组的所有捕获。在 PCRE 中,你可以使用(?:\G(?!\A)|\[link)\s+(\w+)="(\w+)" 谢谢你们,GalAbre 的回答是解决我的问题的好方法:D 我认为我将参数作为组的想法是不可能直接实现的,但是如果我是 @WiktorStribiżew,它可能是一种方式使用这些语言 【参考方案1】:

您可以使用the following regex,它将匹配您的所有参数:

\[link ((?:\w+="\w+" ?)+)\]

然后您可以使用split(' ') 函数解析它们,具体取决于您使用的语言。

【讨论】:

这真的很有帮助,谢谢! :D

以上是关于是否可以匹配字符串中所有出现的模式,具有给定的开始和结束? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java如何从文件中打印与给定模式匹配的所有字符串?

KMP算法-从入门到进阶

字符串的模式匹配算法

leetcode139.单词拆分

给定一个字符串序列,检查它是不是匹配一个模式

删除Java字符串中给定模式的表行