Regular Expressions 101

Save & Share

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression

/
/
gm

Test String

Code Generator

Generated Code

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String[] args) { final String regex = "^(?<time>\\w{3} \\d{2}, \\d{4} \\d{2}:\\d{2}:\\d{2} \\w[AM|PM]) (?<thread>.*)"; final String string = "2013-3-03 14:27:33 [main] INFO Main - Start\n" + "2013-3-03 14:27:33 [main] ERROR Main - Exception\n" + "javax.management.RuntimeErrorException: null\n" + " at Main.main(Main.java:16) ~[bin/:na]\n" + "2013-3-03 14:27:33 [main] INFO Main - End\n\n" + "Feb 06, 2019 10:46:27 AM hudson.model.ParametersAction filter\n" + "WARNING: Skipped parameter `STABLE_RELEASE` as it is undefined on `AUTOMATEDTEST/ENT/atb-ent-api-etransfersenderprofile-automation_qa`. Set `-Dhudson.model.ParametersAction.keepUndefinedPara\n" + "meters=true` to allow undefined parameters to be injected as environment variables or `-Dhudson.model.ParametersAction.safeParameters=[comma-separated list]` to whitelist specific parameter \n" + "names, even though it represents a security breach or `-Dhudson.model.ParametersAction.keepUndefinedParameters=false` to no longer show this message.\n\n\n" + "Feb 06, 2019 11:28:46 AM org.eclipse.jetty.server.handler.ContextHandler$Context log\n" + "WARNING: Error while serving https://jenkins-master.pipeline.atb.com/securityRealm/finishLogin\n" + "java.lang.reflect.InvocationTargetException\n" + " at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:347)\n" + " at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)\n" + " at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)\n" + " at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)\n" + " at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)\n" + " at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:129)\n" + " at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)\n" + " at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:734)\n" + " at org.kohsuke.stapler.Stapler.invoke(Stapler.java:864)\n" + " at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:209)\n" + " at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)\n" + " at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:734)\n" + " at org.kohsuke.stapler.Stapler.invoke(Stapler.java:864)\n" + " at org.kohsuke.stapler.Stapler.invoke(Stapler.java:668)\n" + " at org.kohsuke.stapler.Stapler.service(Stapler.java:238)\n" + " at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n" + " at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865)\n" + " at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655)\n" + " at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)\n" + " at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:243)\n" + " at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n" + " at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)\n" + " at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n" + " at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61)\n" + " at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n" + " at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:239)\n" + " at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:215)\n" + " at net.bull.javamelody.PluginMonitoringFilter.doFilter(PluginMonitoringFilter.java:88)\n" + " at org.jvnet.hudson.plugins.monitoring.HudsonMonitoringFilter.doFilter(HudsonMonitoringFilter.java:114)\n" + " at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n" + " at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125)\n" + " at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n" + " at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:59)\n" + " at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)\n" + " at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)\n" + " at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)\n" + " at org.jenkinsci.plugins.saml.SamlCrumbExclusion.process(SamlCrumbExclusion.java:26)\n" + " at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:73)\n" + " at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)\n" + " at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n" + " at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n" + " at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n" + " at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n" + " at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n" + " at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n" + " at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)\n" + " at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)\n" + " at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)\n" + " at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)\n" + " at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)\n" + " at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)\n" + " at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)\n" + " at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)\n" + " at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)\n" + " at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)\n" + " at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)\n" + " at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)\n" + " at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)\n" + " at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)\n" + " at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)\n" + " at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\n" + " at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)\n" + " at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)\n" + " at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)\n" + " at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)\n" + " at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)\n" + " at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)\n" + " at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)\n" + " at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)\n" + " at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)\n" + " at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)\n" + " at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\n" + " at org.eclipse.jetty.server.Server.handle(Server.java:531)\n" + " at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)\n" + " at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)\n" + " at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)\n" + " at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)\n" + " at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)\n" + " at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)\n" + " at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)\n" + " at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)\n" + " at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)\n" + " at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)\n" + " at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)\n" + " at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)\n" + " at java.lang.Thread.run(Thread.java:748)\n" + "Caused by: org.acegisecurity.BadCredentialsException: Response issue instant is too old or in the future; nested exception is org.pac4j.saml.exceptions.SAMLException: Response issue instant is too old or in the future\n" + " at org.jenkinsci.plugins.saml.SamlProfileWrapper.process(SamlProfileWrapper.java:59)\n" + " at org.jenkinsci.plugins.saml.SamlProfileWrapper.process(SamlProfileWrapper.java:35)\n" + " at org.jenkinsci.plugins.saml.OpenSAMLWrapper.get(OpenSAMLWrapper.java:64)\n" + " at org.jenkinsci.plugins.saml.SamlSecurityRealm.doFinishLogin(SamlSecurityRealm.java:304)\n" + " at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n" + " at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)\n" + " ... 92 more\n" + "Caused by: org.pac4j.saml.exceptions.SAMLException: Response issue instant is too old or in the future\n" + " at org.pac4j.saml.sso.impl.SAML2DefaultResponseValidator.validateSamlProtocolResponse(SAML2DefaultResponseValidator.java:218)\n" + " at org.pac4j.saml.sso.impl.SAML2DefaultResponseValidator.validate(SAML2DefaultResponseValidator.java:132)\n" + " at org.pac4j.saml.sso.impl.SAML2WebSSOMessageReceiver.receiveMessage(SAML2WebSSOMessageReceiver.java:77)\n" + " at org.pac4j.saml.sso.impl.SAML2WebSSOProfileHandler.receive(SAML2WebSSOProfileHandler.java:35)\n" + " at org.pac4j.saml.client.SAML2Client.retrieveCredentials(SAML2Client.java:225)\n" + " at org.pac4j.saml.client.SAML2Client.retrieveCredentials(SAML2Client.java:60)\n" + " at org.pac4j.core.client.IndirectClient.getCredentials(IndirectClient.java:106)\n" + " at org.jenkinsci.plugins.saml.SamlProfileWrapper.process(SamlProfileWrapper.java:55)\n" + " ... 97 more\n\n"; final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); final Matcher matcher = pattern.matcher(string); while (matcher.find()) { System.out.println("Full match: " + matcher.group(0)); for (int i = 1; i <= matcher.groupCount(); i++) { System.out.println("Group " + i + ": " + matcher.group(i)); } } } }

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html