<div dir="ltr">I made a simple modification to std.regex to allow an option to prefix match a regex.<div>Formally, if L(R) is the language recognized by a regex R, the language recognized by prefix matching of R  is:</div>
<div><br></div><div>L(p(R)) = prefix(L(R)) = {u : uv in L(R) for some v}</div><div> </div><div>Trying to come up (by hand or algorithmically) with a regex R' such that L(R') L(p(R)) is awkward and inefficient, eg:</div>
<div><br></div><div>R='hello';</div><div>R'=`|h|he|hell|hello` = `(h(e(l(l(o)?)?)?)?)?`; </div><div><div><div></div></div><div><br></div><div>However thinking in terms of state machine this is much easier and efficient.</div>
<div><br></div><div><div>It looks like this:</div><div>assert("hel".match(`hello\d+`.regex("p")); //p for prefix match</div></div><div><br></div><div>If there's interest in adding this I can prepare a pull request and we can discuss more.</div>
<div><br></div></div><div>Example use case:</div><div>I wrote a function to search a file given a regex, and it is optimized to prune directories early on if they fail to prefix match the regex, eg:</div><div><br></div><div>
dirEntriesOptimized(`abc/folder_\d+/\w+\.cpp`)</div><div>when encountering `abc/bad_subfolder/` it will not recurse on this as it fails the prefix regex match.</div><div><br></div><div><br></div></div>