TLDR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Похоже, вы хотите «xn times» или «xm times», я думаю, что буквальный перевод в regex будет (x{n}|x{m}).
Как https://regex101.com/r / vH7yL5 / 1
или, если вы можете иметь последовательность более m "x" s (при условии m> n), вы можете добавить 'follow no "x" 'и', за которым следует «x», переводя на [^x](x{n}|x{m})[^x]
, но это предполагает, что всегда есть символ и после вас «x». Как вы можете видеть здесь: https://regex101.com/r/bB2vH2/1
вы можете изменить его на (?:[^x]|^)(x{n}|x{m})(?:[^x]|$)
, переведя на «follow no» x ' или после начала строки «и», за которым следует «x» или за ним следует конец строки ». Но все же он не будет соответствовать двум последовательностям с одним символом между ними (потому что для первого совпадения потребуется символ после, а второй - символ раньше), как вы можете видеть здесь: https://regex101.com / r / oC5oJ4 / 1
Наконец, чтобы соответствовать удалению в один символ, вы можете добавить положительный взгляд вперед (? =) на «нет» x «после» или положительный загляните назад (? & lt; =) в «no» x 'before », например: https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Таким образом, вы будете соответствовать только точному числу «х», которое вы хотите.
Вам нужно собрать их все на карте
, используя HttpSessionListener
сам.
public class HttpSessionCollector implements HttpSessionListener {
private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
sessions.put(session.getId(), session);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
sessions.remove(event.getSession().getId());
}
public static HttpSession find(String sessionId) {
return sessions.get(sessionId);
}
}
Просто зарегистрируйте его в web.xml
, чтобы запустить его:
<listener>
<listener-class>com.example.HttpSessionCollector</listener-class>
</listener>
Затем в любом месте, где вы хотите, просто выполните HttpSessionCollector.find (sessionId)
, чтобы получить HttpSession
под вопросом.
Тем не менее, это огромный запах. Безусловно, существуют более эффективные способы удовлетворить фактическое функциональное требование , чем это;) Как я прокомментировал в вашем дополнительном вопросе :
Это второй раз, когда вы задаете вопрос что в реальном мире никогда не следует практиковать. Честно говоря, это все пахнет. Что это, проблема, для которой, по вашему мнению, получение
HttpSession
, связанное с JSESSONID на стороне сервера, и получение значения JSESSIONID на стороне клиента является «решением»? Расскажите об этом в новом вопросе, и вы получите ответы, как это сделать правильно.
Примите это серьезно. Мы не дразним вас, мы просто пытаемся помочь вам в правильном направлении, чтобы избежать поломки вашего проекта / веб-приложения из-за дыр в безопасности и неправильной практики и / или того, что вас уволят.
Нет, API не позволяет этого.
Я бы сказал больше, но это все.
Вы можете сделать это, как указано выше, но существование такого средства является первичным нарушением безопасности между разными пользователями. Вы не должны встраивать подобные вещи в свое приложение.