I have a String called String mainString = "/abc/def&ghi&jkl";
I need to find the substring using Regex in java. The Substring will be lastindexof("/") and indexof("&") i.e. def.
How can I do that using Regular Expression in java?
1 Answer
Maybe something like:
(?<=\/)(?=[^\/]*$).*?(?=&)
(?<=\/)- Positive lookbehind to match positions that are right after a forward slash.(?=[^\/]*$)- Positive lookahead with a negated character class to match anything but a forward slash zero or more times followed by the end string position..*?- Match any character other than newlinge zero or more times but lazy (read up to the next).(?=&)- Positive lookahead to match position in string that is followed by a&.
See the Online Demo
Note: You may swap the positive lookahead for a negative lookahead as mentioned by @CarySwoveland: (?<=\/)(?!.*\/).*?(?=&). See the demo
A second option is using a capture group (as per @TheFourthBird):
/([^/&]+)&[^/]*$
Where:
/- Match a literal forward slash.(- Open capture group.[^/&]+- A negated character class matching anything other than forward slash or ampersand at least once.)- Close capture group.
&- A literal ampersand.[^/]*- A negated character class, matching anything other than forward slash zero or more times.$- End string ancor.
See the Online Demo
Also I am not sure you'd need regular expressions at all. I've no experience with Java whatsoever but pieced this together with some googling:
public class Tst{
public static void main(String []args){
String mainString = "/abc/def&ghi&jkl";
String[] bits = mainString.split("/");
String subbit = bits[bits.length-1].split("&")[0];
System.out.print(subbit);
}
}
Which returns: def
Note: Or even as a one-liner with nested split commands: System.out.print(mainString.split("/")[mainString.split("/").length - 1].split("&")[0]);
3 Comments
(?!.*\/)./([^/&]+)&[^/]*$ regex101.com/r/LMk0Vd/1