问题在于:
XML:
<userPermissions>
<enabled>true</enabled>
<name>ViewPublicReports</name>
</userPermissions>
<userPermissions>
<enabled>true</enabled>
<name>ViewRoles</name>
</userPermissions>
<userPermissions>
<enabled>true</enabled>
<name>ViewSetup</name>
</userPermissions>
我想要匹配的是:
<userPermissions>
<enabled>true</enabled>
<name>ViewRoles</name>
</userPermissions>
我设法放在一起的所有模式都匹配第一个字符串:
(?<=<userPermissions>)[\s\S]+?ViewRoles[\s\S]*?<\/userPermissions>
不太确定如何使“ViewRoles”非贪婪地向后匹配。
提前感谢您的帮助。
*编辑:我正在使用一种在Salesforce实例之间部署元数据的工具,这些实例被捕获为XML。该工具提供了“查找/替换”功能,该功能使用正则表达式来查找“查找”。我没有使用XML解析器的选项。
答案 0 :(得分:1)
这<userPermissions>(?:(?!</userPermissions>)[\S\s])*?ViewRoles[\S\s]*?</userPermissions>
匹配该标记。
<userPermissions>
(?:
(?! </userPermissions> )
[\S\s]
)*?
ViewRoles
[\S\s]*?
</userPermissions>
答案 1 :(得分:0)
有人告诉我,但提取这个的正确方法是使用XML解析器。但是,您也可以使用the following regex:
(.+\n){2}.+ViewRoles.+\n.+
实际上与以下结构相匹配: