Regular Expressions 101

Save & Manage Regex

  • Current Version: 1
  • Save & Share
  • Community Library

Flavor

  • PCRE2 (PHP)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java
  • .NET 7.0 (C#)
  • Rust
  • PCRE (Legacy)
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests
Sponsors
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
Processing...

Test String

Code Generator

Generated Code

// include the latest version of the regex crate in your Cargo.toml extern crate regex; use regex::Regex; fn main() { let regex = Regex::new(r#"(?m)"\$(G[ABILNPQ][A-Z]{3}(?:,(?:\d+(?:\.\d+)?|[a-zA-Z]+|))*,\w*\*[\dA-Fa-f]{2})""#).unwrap(); let string = "BOOST_AUTO_TEST_CASE(ValidOneField) { BOOST_CHECK(isSingleSentence(\"$GPXXX,1*23\")); } BOOST_AUTO_TEST_CASE(ValidTwoFields) { BOOST_CHECK(isSingleSentence(\"$GPXXX,1,testing*69\")); } BOOST_AUTO_TEST_CASE(ValidEmptyField) { BOOST_CHECK(isSingleSentence(\"$GPXXX,*47\")); } BOOST_AUTO_TEST_CASE(ValidManyFields) { const std::string commas(1000, ','); // 1000 fields BOOST_CHECK(isSingleSentence(\"$GPXXX\" + commas + \"*28\")); } BOOST_AUTO_TEST_CASE(ValidEdgeLetters) { BOOST_CHECK(isSingleSentence(\"$GPAAA,1*23\")); BOOST_CHECK(isSingleSentence(\"$GPZZZ,1*23\")); } BOOST_AUTO_TEST_CASE(ValidEdgeHexDecimalDigits) { BOOST_CHECK(isSingleSentence(\"$GPXXX,1*09\")); BOOST_CHECK(isSingleSentence(\"$GPXXX,1*90\")); } BOOST_AUTO_TEST_CASE(ValidLowercaseHexCharacters) { BOOST_CHECK(isSingleSentence(\"$GPXXX,*ce\")); } BOOST_AUTO_TEST_CASE(ValidUppercaseHexCharacters) { BOOST_CHECK(isSingleSentence(\"$GPXXX,*DB\")); } BOOST_AUTO_TEST_CASE(ValidHexCharactersMix) { BOOST_CHECK(isSingleSentence(\"$GPXXX,*b6\")); BOOST_CHECK(isSingleSentence(\"$GPXXX,*3E\")); BOOST_CHECK(isSingleSentence(\"$GPXXX,*cD\")); } BOOST_AUTO_TEST_CASE(ValidEdgeHexDigits) { BOOST_CHECK(isSingleSentence(\"$GPXXX,*af\")); BOOST_CHECK(isSingleSentence(\"$GPXXX,*FA\")); } BOOST_AUTO_TEST_CASE(ValidTypicalSentences) { BOOST_CHECK(isSingleSentence(\"$GPGLL,5425.31,N,107.03,W,82610*69\")); BOOST_CHECK(isSingleSentence(\"$GPWPL,5128.62,N,00027.58,W,EGLL*59\")); BOOST_CHECK(isSingleSentence(\"$GPRMC,113922.000,A,3722.5993,N,00559.2458,W,0.000,0.00,150914,,A*62\")); BOOST_CHECK(isSingleSentence(\"$GPGGA,113922.000,3722.5993,N,00559.2458,W,1,0,,4.0,M,,M,,*40\")); BOOST_CHECK(isSingleSentence(\"$GPMSS,55,27,318.0,100,*66\")); } BOOST_AUTO_TEST_CASE(ValidTransmitterOtherThanGP) { // GP: GPS BOOST_CHECK(isSingleSentence(\"$GLXXX,1*23\")); // GL: GLONASS BOOST_CHECK(isSingleSentence(\"$GAXXX,1*23\")); // GA: Galileo BOOST_CHECK(isSingleSentence(\"$GBXXX,1*23\")); // GB: BeiDou BOOST_CHECK(isSingleSentence(\"$GIXXX,1*23\")); // GA: NavIC BOOST_CHECK(isSingleSentence(\"$GQXXX,1*23\")); // GB: QZSS BOOST_CHECK(isSingleSentence(\"$GNXXX,1*23\")); // GN: combined } BOOST_AUTO_TEST_CASE(InvalidMissingSuffix) { BOOST_CHECK(!isSingleSentence(\"\")); BOOST_CHECK(!isSingleSentence(\"$\")); BOOST_CHECK(!isSingleSentence(\"$G\")); BOOST_CHECK(!isSingleSentence(\"$GP\")); BOOST_CHECK(!isSingleSentence(\"$GPG\")); BOOST_CHECK(!isSingleSentence(\"$GPGL\")); BOOST_CHECK(!isSingleSentence(\"$GPGLL\")); BOOST_CHECK(!isSingleSentence(\"$GPGLL,\")); BOOST_CHECK(!isSingleSentence(\"$GPGLL,*\")); BOOST_CHECK(!isSingleSentence(\"$GPGLL,*1\")); } BOOST_AUTO_TEST_CASE(InvalidStartSymbol) { BOOST_CHECK(!isSingleSentence(\"SGPXXX,*01\")); BOOST_CHECK(!isSingleSentence(\"GPXXX,*01\")); } BOOST_AUTO_TEST_CASE(InvalidLettersPrefix) { BOOST_CHECK(!isSingleSentence(\"$HPXXX,*01\")); BOOST_CHECK(!isSingleSentence(\"$PXXX,*01\")); BOOST_CHECK(!isSingleSentence(\"$GXXX,*01\")); BOOST_CHECK(!isSingleSentence(\"$KLXXX,*01\")); BOOST_CHECK(!isSingleSentence(\"$XXX,*01\")); } BOOST_AUTO_TEST_CASE(InvalidFormatCode) { BOOST_CHECK(!isSingleSentence(\"$GP,*01\")); BOOST_CHECK(!isSingleSentence(\"$GPX,*01\")); BOOST_CHECK(!isSingleSentence(\"$GPXX,*01\")); BOOST_CHECK(!isSingleSentence(\"$GP1XX,*01\")); BOOST_CHECK(!isSingleSentence(\"$GPX%X,*01\")); BOOST_CHECK(!isSingleSentence(\"$GPXX ,*01\")); BOOST_CHECK(!isSingleSentence(\"$GPabc,*01\")); } BOOST_AUTO_TEST_CASE(InvalidNoFields) { BOOST_CHECK(!isSingleSentence(\"$GPXXX*01\")); } BOOST_AUTO_TEST_CASE(InvalidReservedCharInField) { BOOST_CHECK(!isSingleSentence(\"$GPXXX,$77*01\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,2*3,1*77\")); } BOOST_AUTO_TEST_CASE(InvalidChecksumPrefix) { BOOST_CHECK(!isSingleSentence(\"$GPXX,X77\")); BOOST_CHECK(!isSingleSentence(\"$GPXX,X%77\")); } BOOST_AUTO_TEST_CASE(InvalidChecksumTooLong) { BOOST_CHECK(!isSingleSentence(\"$GPXXX,*012\")); } // There are some other ASCII symbols between the 0-9 characters and the A-Z range, // and then some more between A-Z and the a-z range. BOOST_AUTO_TEST_CASE(InvalidHexSymbolsFromMiddleOfASCIIRange) { BOOST_CHECK(!isSingleSentence(\"$GPXXX,*=3\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*4?\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*^5\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*8-\")); } // ASCII symbols taken from the edges just outside the ASCII ranges of valid hex characters. BOOST_AUTO_TEST_CASE(InvalidHexSymbolsASCIIBoundaries) { BOOST_CHECK(!isSingleSentence(\"$GPXXX,*2:\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*@9\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*7G\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*`8\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*1/\")); BOOST_CHECK(!isSingleSentence(\"$GPXXX,*g3\")); }"; // result will be an iterator over tuples containing the start and end indices for each match in the string let result = regex.captures_iter(string); for mat in result { println!("{:?}", mat); } }

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 Rust, please visit: https://docs.rs/regex/latest/regex/