用于在 XML 中搜索唯一姓氏的正则表达式

Regex to search for unique last names in XML

我在 XML 文件中有我想要捕获的姓氏,这些姓氏是唯一的。我将从另一个 Whosebug 答案开始: 我无法将我拥有的字符串与 return 一个 Adams 和一个 Yellow 相匹配。

\b(.*<LastName>(.*)<\/LastName>)\b(?![\s\S]*\b\b)

              <LastName>Adams</LastName>
              <LastName>Adams</LastName>
              <LastName>Yellow</LastName>

https://regex101.com/r/2wLsm5/1

这对你有用吗?

/<LastName>(\w+)<\/LastName>(?!.*<LastName><\/LastName>)/gsm(注意标志,它们很重要)

Demo

问题是您的 (.*) 匹配名称允许它跨多行匹配。我用 \w+ 替换了它,因此它只匹配单词字符(不过,根据您的需要,可能需要一些更国际化的东西)。

您可以捕获标签的名称及其内容。
然后在负前瞻中使用反向引用。

标签内容的懒惰搜索.*?在这里会有所帮助。

<(LastName)>(.*?)<\/>(?![\s\S]*?<><\/>)

在 regex101 上测试 here