简体   繁体   中英

Regex: how to extract a JSESSIONID cookie value from cookie string?

I might receive the following cookie string. hello=world;JSESSIONID=sdsfsf;Path=/ei

I need to extract the value of JSESSIONID

I use the following pattern but it doesn't seem to work. However https://regex101.com shows it's correct.

Pattern PATTERN_JSESSIONID = Pattern.compile(".*JSESSIONID=(?<target>[^;\\n]*)");

You can reach your goal with a simpler approach using regex (^|;)JSESSIONID=(.*); . Here is the demo on Regex101 (you have forgotten to link the regular expression using the save button). Take a look on the following code. You have to extract the matched values using the class Matcher :

String cookie = "hello=world;JSESSIONID=sdsfsf;Path=/ei";
Pattern PATTERN_JSESSIONID = Pattern.compile("(^|;)JSESSIONID=(.*);");
Matcher m = PATTERN_JSESSIONID.matcher(cookie);
if (m.find()) {
   System.out.println(m.group(0));
}

Output value:

sdsfsf

Of course the result depends on the all of possible variations of the input text. The snippet above will work in every case the value is between JSESSIONID and ; characters.

You can try below regex:

JSESSIONID=([^;]+)

regex explanation

String cookies = "hello=world;JSESSIONID=sdsfsf;Path=/ei;submit=true";
Pattern pat = Pattern.compile("\\bJSESSIONID=([^;]+)");
Matcher matcher = pat.matcher(cookies);
boolean found = matcher.find();
System.out.println("Sesssion ID: " + (found ? matcher.group(1): "not found"));

DEMO

You can even get what you aiming for with Splitting and Replacing the string aswell, below I am sharing which is working for me.

String s = "hello=world;JSESSIONID=sdsfsf;Path=/ei";

List<String> sarray = Arrays.asList(s.split(";"));

String filterStr = sarray.get(sarray.indexOf("JSESSIONID=sdsfsf"));
System.out.println(filterStr.replace("JSESSIONID=", ""));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM