Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for subpatterns DEFINE #274

Open
sandwoodK opened this issue Oct 24, 2022 · 2 comments
Open

Support for subpatterns DEFINE #274

sandwoodK opened this issue Oct 24, 2022 · 2 comments

Comments

@sandwoodK
Copy link

example : some IPV4 pcre using a DEFINE.

(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}\b

Can not find anywhere in the documentation that this is not supported but it does not compile.

Supporting this would certainly help adoption of CTRE because as far as i know this is the only possible way of doing reuse in pcre.

@SirNate0
Copy link

While it is not intuitive to me, I believe ?(DEFINE) is a conditional pattern, though I'm not all that familiar with PCRE (it is listed in the PCRE doc's CONDITIONAL PATTERNS section at least). And conditional patterns are mentioned in the readme as being unsupported:

The library is implementing most of the PCRE syntax with a few exceptions:

  • callouts
  • comments
  • conditional patterns

@OlivierReubens
Copy link

Since it's C++.. use a macro (or compile time literal string template that has + operator)

#define DEFINE "something"

auto ret = ctre::match<"(?(" DEFINE ")(?<byte2.....">(teststring);

DEFINE can't by a dynamic pattern determined at runtime... then it would no longer be CTre

You can however achieve that by splitting it all up into 2 ctre matches (the bit before and the bit after DEFINE) and a std::regex match for the dynamic DEFINE pattern.
combining the 3 may be somewhat complicated depending on the entire pattern seems fairly simple here since the DEFINE isn't repeated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants