我正在尝试创建一个正则表达式,从tex文档中的cite命令中提取bibtex键。它应该能够将完整的乳胶文档作为输入字符串并将所有bibtex键作为匹配返回:
Blahbla document
\somecommand{test} blabla nonsense lorem ipsum \cite{key1} and \cite{key2, key3, key4}
返回
key1
key2
key3
key4
提出了这个问题
\\cite\{([^\},]+)(?:,\s*([^\},]+))*\}
除了在第二个\ cite命令中只将key2和key4标识为匹配这一事实外,它才有效。
任何人都可以解释这里出了什么问题以及应该怎么做?提前谢谢!
答案 0 :(得分:1)
要做连续字符串匹配,您需要使用\G
锚点。
(?:\\cite\{|(?<!^)\G),?\s*([^,}]+)
OR
(?:\\cite\{|(?<!^)\G),?\s*([^,}]+)(?=[^}]*})