【发布时间】:2009-09-14 17:35:50
【问题描述】:
全部,
我需要编写一个正则表达式来执行以下操作 替换
(A)
src ="/folder/image.jpg"
或
src="http://www.mydomain.com/folder/image.jpg"
与
src="/cache/getCacheItem.aspx?source_url=http://www.mydomain.com/folder/image.jpg"
(B)
href="/folder/file.zip"
或
href="http://www.mydomain.com/folder/file.zip"
与
href="/cache/getCaccheItem.aspx?source_url=http://www.mydomain.com/folder/file.zip
我知道我可以使用
(src|href).*?=['|\"](?<url>.*?)['|\"]
替换值为
$1="/legacy_integration/cache/getCacheItem.aspx?source_url=$2"
捕捉 src=... 和 href=... 属性。但是,我需要根据文件扩展名进行过滤 - 仅匹配 jpg、png、gif 等有效图像扩展名,并且仅匹配 zip 和 pdf 等 href 扩展名。
有什么建议吗?问题可以总结为:修改上面的表达式,只匹配特定的文件扩展名,并且只有在原始url是相对的情况下才允许插入域http://www.mydomain.com/,从而保证输出文本仅包含一次域。
我是否需要使用两种不同的正则表达式来执行此操作,一种用于包含域的源文本,另一种用于不包含域的源文本?或者我可以以某种方式使用条件匹配语句,结合替换表达式,将根据匹配的文本是否包含域来插入域?
我知道我可以使用自定义匹配评估器执行此操作,但似乎在正则表达式本身内执行此操作可能更快/更有效。
建议/cmets?
【问题讨论】: