用于在XML中查找和替换变量URL字符串的正则表达式

时间:2012-06-04 22:05:30

标签: xml regex url dreamweaver

我在查找正则表达式时遇到了一些困难,因为正式表达式会删除特定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中最后一个斜杠之前的所有内容?

1 个答案:

答案 0 :(得分:1)

由于这是XML,因此网址本身不能包含(非转义)<>。你可以利用这个优势:

<bpoc:resourceMetadataLoc>http://app01/media/images[^<]*/([^<]*)

这应该捕获URL的最后一段(例如“1957.59.jpg”)。它的工作原理是贪婪地匹配所有内容直到标记结束的开头(第一个[^<]*),然后回溯以匹配最近的(即最后一个)/,然后在斜杠后捕获所有内容(将([^<]*))放入组1中,以便在替换步骤中使用它。