I'm trying to use regex in a particular scenario as explained below:
There are many HTML pages, each containing number of <img src>
tags having dynamic values:
Tag1 = <p>Para1 <img src="/A/images/b.txt">Some text</p>
Tag2 = <p>Para2 <img src="/A/B/images/c.jpeg">Some text</p>
Tag3 = <p>Para3 <img src="/../images/H/e.png">Some text</p>
Tag4 = <p>Para4 <img src="/../D/images/G/J/f.gif">Some text</p>
We target the pattern "/<anything>/images/
. What we need after replacement is
Tag1 = <p>Para1 <img src="/library/MYFOLDER/location/b.txt">Some text</p>
Tag2 = <p>Para2<img src="/library/MYFOLDER/location/c.jpeg">Some text</p>
Tag3 = <p>Para3<img src="/library/MYFOLDER/location/H/e.png">Some text</p>
Tag4 = <p>Para4<img src="/library/MYFOLDER/location/G/J/f.gif">Some text</p>
What's actually happening is very different.The pattern is eating up everything after /images
and giving us
Tag1 = <p>Para1 <img src="/library/MYFOLDER/locationp>
Tag2 = <p>Para2<img src="/library/MYFOLDER/locationp>
Tag3 = <p>Para3<img src="/library/MYFOLDER/locationp>
Tag4 = <p>Para4<img src="/library/MYFOLDER/locationp>
Here is the regex pattern I'm using
"{1}(.){1,}[/images/]{1}<br>
Here is the code:
String subStringTem = "<p><strong>Control Steps:</strong> <img src=\"../images/retain_image.gif\" width=\"20\" > Description.</p>";
String newImagPath = "\"/library/MYFOLDER/location";
final Pattern p = Pattern.compile("\"{1}(.){1,}[/images/]{1}");
final Matcher m = p.matcher(subStringTem);
String result = m.replaceAll(newImagPath);
System.out.println(result);
Expected Result:
<p><strong>Control Steps:</strong> <img src="/library/MYFOLDER/location/retain_image.gif\" width=\"20\" > Description.</p>
Actual Result:
<p><strong>Control Steps:</strong> <img src="/library/MYFOLDER/locationp>