我在查找正则表达式时遇到了一些困难,因为正式表达式会删除特定XML标记中的部分字符串并替换它。我有许多带有可变部分的URL路径,所以我需要找到某个字符串和URL中最后一个斜杠之间的所有内容。例如,我的标签和URL可能如下所示:
<bpoc:resourceMetadataLoc>http://app01/media/images/I//1951-1960_Embark_Object_Photos/1957.59.jpg</bpoc:resourceMetadataLoc>
或
<bpoc:resourceMetadataLoc>http://app01/media/images/CONTEMPORARY/1986-2005/1991.2.jpg</bpoc:resourceMetadataLoc>
输出应该看起来像
<bpoc:resourceMetadataLoc>http://app01/media/Previews/1957.59.jpg</bpoc:resourceMetadataLoc>
这是我得到的,但它捕获了字符串中的最后一个斜杠,而不是倒数第二个斜杠:
(<bpoc:resourceMetadataLoc>http://app01/media/images)+(.*[/])
该正则表达式将捕获以下内容:
<bpoc:resourceMetadataLoc>http://app01/media/images/I//1951-1960_Embark_Object_Photos/1957.59.jpg</
我需要添加到正则表达式中以从查询中排除</bpoc:resourceMetadataLoc>
位,然后捕获URL中最后一个斜杠之前的所有内容?
答案 0 :(得分:1)
由于这是XML,因此网址本身不能包含(非转义)<
或>
。你可以利用这个优势:
<bpoc:resourceMetadataLoc>http://app01/media/images[^<]*/([^<]*)
这应该捕获URL的最后一段(例如“1957.59.jpg”)。它的工作原理是贪婪地匹配所有内容直到标记结束的开头(第一个[^<]*
),然后回溯以匹配最近的(即最后一个)/
,然后在斜杠后捕获所有内容(将([^<]*)
)放入组1中,以便在替换步骤中使用它。