← Back to Blog

Regex in Rust: The regex Crate Explained with 10 Patterns

April 3, 2026 3 min read By CodeTidy Team

Regex in Rust: The regex Crate Explained with 10 Patterns

Regex - a powerful tool for pattern matching in strings. But, have you ever struggled to get it working in Rust? We've all been there - staring at a cryptic error message, wondering why our carefully crafted regex pattern just won't compile. But fear not, dear developer! Today, we're going to demystify the regex crate and show you how to harness its power in your Rust projects.

Table of Contents

  • Getting Started with the regex Crate
  • Basic Pattern Matching
  • Working with Captures
  • Using Lazy Static and Once Cell
  • Matching Multiple Patterns with Regex-Set
  • Common Pitfalls and Best Practices
  • Key Takeaways
  • FAQ

Getting Started with the regex Crate

To start using the regex crate, add the following dependency to your Cargo.toml file:

[dependencies]
regex = "1"

Then, import the crate in your Rust file:

use regex::Regex;

The Regex struct is the core of the regex crate. It represents a compiled regex pattern. You can create a new Regex instance using the Regex::new method:

let re = Regex::new(r"\d+").unwrap();

This will compile the regex pattern \d+, which matches one or more digits.

Basic Pattern Matching

Now that we have a compiled regex pattern, let's use it to match some strings:

let re = Regex::new(r"\d+").unwrap();
let text = "Hello, my phone number is 123-456-7890";

if re.is_match(text) {
    println!("Found a match!");
}

This code will print "Found a match!" because the string "123-456-7890" contains one or more digits.

Working with Captures

Sometimes, you want to extract specific parts of the matched text. That's where captures come in. Captures are groups of parentheses in your regex pattern that allow you to extract specific parts of the match:

let re = Regex::new(r"(\d{3})-(\d{3})-(\d{4})").unwrap();
let text = "Hello, my phone number is 123-456-7890";

if let Some(caps) = re.captures(text) {
    println!("Area code: {}", caps.get(1).unwrap().as_str());
    println!("Prefix: {}", caps.get(2).unwrap().as_str());
    println!("Line number: {}", caps.get(3).unwrap().as_str());
}

This code will print the area code, prefix, and line number of the phone number.

Using Lazy Static and Once Cell

If you need to use the same regex pattern in multiple places, you can use lazy static or once cell to compile the pattern only once:

use lazy_static::lazy_static;
use regex::Regex;

lazy_static! {
    static ref RE: Regex = Regex::new(r"\d+").unwrap();
}

fn main() {
    let text = "Hello, my phone number is 123-456-7890";
    if RE.is_match(text) {
        println!("Found a match!");
    }
}

This code will compile the regex pattern only once, when the lazy_static block is executed.

Matching Multiple Patterns with Regex-Set

Sometimes, you need to match multiple patterns against a string. That's where regex-set comes in:

use regex::RegexSet;

let patterns = vec![r"\d+", r"[a-zA-Z]+", r"\W+"];
let set = RegexSet::new(&patterns).unwrap();

let text = "Hello, my phone number is 123-456-7890";
for match_ in set.matches(text) {
    println!("Found a match: {}", patterns[match_]);
}

This code will print all the patterns that match the input string.

Common Pitfalls and Best Practices

  • Always use raw strings (r"") when defining regex patterns to avoid issues with backslashes.
  • Use captures to extract specific parts of the match.
  • Use lazy static or once cell to compile regex patterns only once.
  • Use regex-set to match multiple patterns against a string.

Key Takeaways

  • The regex crate is a powerful tool for pattern matching in Rust.
  • Use Regex::new to compile a regex pattern.
  • Use captures to extract specific parts of the match.
  • Use lazy static or once cell to compile regex patterns only once.
  • Use regex-set to match multiple patterns against a string.

FAQ

Q: What is the difference between Regex and RegexSet?

Regex is used to compile a single regex pattern, while RegexSet is used to match multiple patterns against a string.

Q: How do I extract specific parts of the match?

Use captures to extract specific parts of the match. Captures are groups of parentheses in your regex pattern that allow you to extract specific parts of the match.

Q: How do I compile a regex pattern only once?

Use lazy static or once cell to compile regex patterns only once.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp