使结束定界符与开始定界符相同而不捕获它

时间:2019-05-07 01:29:58

标签: regex

我有这个正则表达式(Regex101):

\[quote((?:\s[a-z]+=["'][[:space:]\w]+["'])+)*\](.*?)\[\/quote\]

基本上,这使我可以在BBCode报价标签上添加多个参数,并允许两个捕获:参数(将被切片/分解并格式化)和标签的内容。要获取参数,参数必须在单引号或双引号内。

如何使开头报价必须与封闭报价的类型相同?例如,如果我用双引号打开,当我关闭时,可以只用双引号关闭,不应接受单引号。所有这些都没有捕获它,因为我不想有无用的匹配项。

谢谢,也提供任何改进正则表达式的建议!

1 个答案:

答案 0 :(得分:1)

您需要将报价放入组(['"])或命名为组(?<quote>['"])的目录中,之后您可以按索引\2或名称{{ 1}}。请注意,named group syntax可能会有所不同,具体取决于您使用的正则表达式引擎。

示例: \k<quote> 将匹配^(['"])\w+\1$但不匹配"abc"