<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="A module for building and searching with lazy deterministic finite automata (DFAs)."><title>regex_automata::hybrid - Rust</title><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><linkrel="stylesheet"href="../../static.files/normalize-76eba96aa4d2e634.css"><linkrel="stylesheet"href="../../static.files/rustdoc-5bc39a1768837dd0.css"><metaname="rustdoc-vars"data-root-path="../../"data-static-root-path="../../static.files/"data-current-crate="regex_automata"data-themes=""data-resource-suffix=""data-rustdoc-version="1.77.0 (aedd173a2 2024-03-17)"data-channel="1.77.0"data-search-js="search-dd67cee4cfa65049.js"data-settings-js="settings-4313503d2e1961c2.js"><scriptsrc="../../static.files/storage-4c98445ec4002617.js"></script><scriptdefersrc="../sidebar-items.js"></script><scriptdefersrc="../../static.files/main-48f368f3872407c8.js"></script><noscript><linkrel="stylesheet"href="../../static.files/noscript-04d5337699b92874.css"></noscript><linkrel="alternate icon"type="image/png"href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><linkrel="alternate icon"type="image/png"href="../../static.files/favicon-32x32-422f7d1d52889060.png"><linkrel="icon"type="image/svg+xml"href="../../static.files/favicon-2c020d218678b618.svg"></head><bodyclass="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="mobile-topbar"><buttonclass="sidebar-menu-toggle"title="show sidebar"></button></nav><navclass="sidebar"><divclass="sidebar-crate"><h2><ahref="../../regex_automata/index.html">regex_automata</a><spanclass="version">0.4.6</span></h2></div><h2class="location"><ahref="#">Module hybrid</a></h2><divclass="sidebar-elems"><section><ulclass="block"><li><ahref="#modules">Modules</a></li><li><ahref="#structs">Structs</a></li><li><ahref="#enums">Enums</a></li></ul></section><h2><ahref="../index.html">In crate regex_automata</a></h2></div></nav><divclass="sidebar-resizer"></div>
<main><divclass="width-limiter"><navclass="sub"><formclass="search-form"><span></span><divid="sidebar-button"tabindex="-1"><ahref="../../regex_automata/all.html"title="show sidebar"></a></div><inputclass="search-input"name="search"aria-label="Run search in the documentation"autocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"><divid="help-button"tabindex="-1"><ahref="../../help.html"title="help">?</a></div><divid="settings-menu"tabindex="-1"><ahref="../../settings.html"title="settings"><imgwidth="22"height="22"alt="Change settings"src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><sectionid="main-content"class="content"><divclass="main-heading"><h1>Module <ahref="../index.html">regex_automata</a>::<wbr><aclass="mod"href="#">hybrid</a><buttonid="copy-path"title="Copy item path to clipboard"><imgsrc="../../static.files/clipboard-7571035ce49a181d.svg"width="19"height="18"alt="Copy item path"></button></h1><spanclass="out-of-band"><aclass="src"href="../../src/regex_automata/hybrid/mod.rs.html#1-144">source</a> · <buttonid="toggle-all-docs"title="collapse all docs">[<span>−</span>]</button></span></div><detailsclass="toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>A module for building and searching with lazy deterministic finite automata
(DFAs).</p>
<p>Like other modules in this crate, lazy DFAs support a rich regex syntax with
Unicode features. The key feature of a lazy DFA is that it builds itself
incrementally during search, and never uses more than a configured capacity of
memory. Thus, when searching with a lazy DFA, one must supply a mutable “cache”
in which the actual DFA’s transition table is stored.</p>
<p>If you’re looking for fully compiled DFAs, then please see the top-level
<p>This section gives a brief overview of the primary types in this module:</p>
<ul>
<li>A <ahref="regex/struct.Regex.html"title="struct regex_automata::hybrid::regex::Regex"><code>regex::Regex</code></a> provides a way to search for matches of a regular
expression using lazy DFAs. This includes iterating over matches with both the
start and end positions of each match.</li>
<li>A <ahref="dfa/struct.DFA.html"title="struct regex_automata::hybrid::dfa::DFA"><code>dfa::DFA</code></a> provides direct low level access to a lazy DFA.</li>
<h2id="example-searching-with-multiple-regexes"><aclass="doc-anchor"href="#example-searching-with-multiple-regexes">§</a>Example: searching with multiple regexes</h2>
<h2id="differences-with-fully-compiled-dfas"><aclass="doc-anchor"href="#differences-with-fully-compiled-dfas">§</a>Differences with fully compiled DFAs</h2>
<p>This module supports the same syntax as the <code>regex</code> crate, since they share the
same parser. You can find an exhaustive list of supported syntax in the
<ahref="https://docs.rs/regex/1/regex/#syntax">documentation for the <code>regex</code> crate</a>.</p>
<p>There are two things that are not supported by the lazy DFAs in this module:</p>
<ul>
<li>Capturing groups. The DFAs (and <ahref="regex/struct.Regex.html"title="struct regex_automata::hybrid::regex::Regex"><code>Regex</code></a>es built on top
of them) can only find the offsets of an entire match, but cannot resolve
the offsets of each capturing group. This is because DFAs do not have the
expressive power necessary. Note that it is okay to build a lazy DFA from an
NFA that contains capture groups. The capture groups will simply be ignored.</li>
<li>Unicode word boundaries. These present particularly difficult challenges for
DFA construction and would result in an explosion in the number of states.
One can enable <ahref="dfa/struct.Config.html#method.unicode_word_boundary"title="method regex_automata::hybrid::dfa::Config::unicode_word_boundary"><code>dfa::Config::unicode_word_boundary</code></a> though, which provides
heuristic support for Unicode word boundaries that only works on ASCII text.
Otherwise, one can use <code>(?-u:\b)</code> for an ASCII word boundary, which will work
on any input.</li>
</ul>
<p>There are no plans to lift either of these limitations.</p>
<p>Note that these restrictions are identical to the restrictions on fully
</div></details><h2id="modules"class="section-header">Modules<ahref="#modules"class="anchor">§</a></h2><ulclass="item-table"><li><divclass="item-name"><aclass="mod"href="dfa/index.html"title="mod regex_automata::hybrid::dfa">dfa</a></div><divclass="desc docblock-short">Types and routines specific to lazy DFAs.</div></li><li><divclass="item-name"><aclass="mod"href="regex/index.html"title="mod regex_automata::hybrid::regex">regex</a></div><divclass="desc docblock-short">A lazy DFA backed <code>Regex</code>.</div></li></ul><h2id="structs"class="section-header">Structs<ahref="#structs"class="anchor">§</a></h2><ulclass="item-table"><li><divclass="item-name"><aclass="struct"href="struct.BuildError.html"title="struct regex_automata::hybrid::BuildError">BuildError</a></div><divclass="desc docblock-short">An error that occurs when initial construction of a lazy DFA fails.</div></li><li><divclass="item-name"><aclass="struct"href="struct.CacheError.html"title="struct regex_automata::hybrid::CacheError">CacheError</a></div><divclass="desc docblock-short">An error that occurs when cache usage has become inefficient.</div></li><li><divclass="item-name"><aclass="struct"href="struct.LazyStateID.html"title="struct regex_automata::hybrid::LazyStateID">LazyStateID</a></div><divclass="desc docblock-short">A state identifier specifically tailored for lazy DFAs.</div></li></ul><h2id="enums"class="section-header">Enums<ahref="#enums"class="anchor">§</a></h2><ulclass="item-table"><li><divclass="item-name"><aclass="enum"href="enum.StartError.html"title="enum regex_automata::hybrid::StartError">StartError</a></div><divclass="desc docblock-short">An error that can occur when computing the start state for a search.</div></li></ul></section></div></main></body></html>