正则表达式不捕获字符

时间:2020-01-23 22:46:07

标签: regex

我不擅长Regex,但是我被要求编辑一个已有字符来解释某个字符(,)。

原文:// doFilter() in KerberosAuthFilter //the KerberosAuthFilter class is the same as the custom SpnegoAuthenticationProcessingFilter, //except for the end of the doFilter () method @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; if (skipIfAlreadyAuthenticated) { Authentication existingAuth = SecurityContextHolder.getContext().getAuthentication(); if (existingAuth != null && existingAuth.isAuthenticated() && (existingAuth instanceof AnonymousAuthenticationToken) == false) { chain.doFilter(request, response); return; } } String header = request.getHeader("Authorization"); if (header != null && (header.startsWith("Negotiate ") || header.startsWith("Kerberos "))) { if (logger.isDebugEnabled()) { logger.debug("Received Negotiate Header for request " + request.getRequestURL() + ": " + header); } byte[] base64Token = header.substring(header.indexOf(" ") + 1).getBytes("UTF-8"); byte[] kerberosTicket = Base64.decode(base64Token); KerberosServiceRequestToken authenticationRequest = new KerberosServiceRequestToken(kerberosTicket); authenticationRequest.setDetails(authenticationDetailsSource.buildDetails(request)); Authentication authentication; try { authentication = authenticationManager.authenticate(authenticationRequest); } catch (AuthenticationException e) { logger.warn("Negotiate Header was invalid: " + header, e); SecurityContextHolder.clearContext(); if (failureHandler != null) { failureHandler.onAuthenticationFailure(request, response, e); } else { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.flushBuffer(); } return; } sessionStrategy.onAuthentication(authentication, request, response); SecurityContextHolder.getContext().setAuthentication(authentication); if (successHandler != null) { successHandler.onAuthenticationSuccess(request, response, authentication); } chain.doFilter(request, response); } else { response.sendRedirect("/login.html"); System.out.println("redirect"); return; } }

我的阅读方式:任何不在&#32和&#126之间的字符。逗号是&#44

我的新正则表达式:

[^ -~]

我的阅读方式:任何字符不在&#32和&#43之间,并且任何字符不在&#45和&#126

之间

但是新的正则表达式似乎不适用于我的情况。

1 个答案:

答案 0 :(得分:0)

您的新正则表达式实际上是在+后面的空格中寻找一个字符,然后是&,然后是-~以外的字符。相反,您应该将两个范围合并为一个字符类:

[^ -+--~]

https://github.com/moby/moby/issues/26817

您还可以使用替换来允许,

,|[^ -~]

Demo on regex101