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