PCRE2_DFA_MATCH(3)

πŸ’… PCRE2_DFA_MATCH(3): the group-chat guide πŸ’…

okay bestie, we're doing the Library Functions Manual page for PCRE2_DFA_MATCH(3) today. grab a strawberry drink πŸ“ and let's get into it. no cap.


✨ NAME ✨

PCRE2 - Perl-compatible regular expressions (revised API)

🧾 SYNOPSIS 🧾

#include <pcre2.h>

int pcre2_dfa_match(const pcre2_code *code, PCRE2_SPTR subject,
  PCRE2_SIZE length, PCRE2_SIZE startoffset,
  uint32_t options, pcre2_match_data *match_data,
  pcre2_match_context *mcontext,
  int *workspace, PCRE2_SIZE wscount);

πŸ’¬ DESCRIPTION πŸ’¬

okay so this function matches a compiled regular expression against a given subject string, using an alternative matching algorithm that scans the subject string just once (except when processing lookaround assertions). no cap. But listen: this function is not Perl-compatible (the Perl-compatible matching function is pcre2_match()). iykyk.

The arguments for this function are:

  • code β€” points to the compiled pattern
  • subject β€” points to the subject string
  • length β€” length of the subject string
  • startoffset β€” offset in the subject at which to start matching
  • options β€” option bits
  • match_data β€” points to a match data block, for results
  • mcontext β€” points to a match context, or is NULL
  • workspace β€” points to a vector of ints used as working space
  • wscount β€” number of elements in the vector

lowkey important: the size of output vector needed to contain all the results depends on the number of simultaneous matches, not on the number of parentheses in the pattern. so using pcre2_match_data_create_from_pattern() to create the match data block is therefore not advisable when using this function. bestie, don't do it πŸ’€

A match context is needed only if you want to set up a callout function or specify the heap limit or the match or the recursion depth limits. also, the length and startoffset values are code units, not characters. The options are:

  • PCRE2_ANCHORED β€” Match only at the first position
  • PCRE2_COPY_MATCHED_SUBJECT β€” On success, make a private subject copy
  • PCRE2_ENDANCHORED β€” Pattern can match only at end of subject
  • PCRE2_NOTBOL β€” Subject is not the beginning of a line
  • PCRE2_NOTEOL β€” Subject is not the end of a line
  • PCRE2_NOTEMPTY β€” An empty string is not a valid match
  • PCRE2_NOTEMPTY_ATSTART β€” An empty string at the start of the subject is not a valid match
  • PCRE2_NO_UTF_CHECK β€” Do not check the subject for UTF validity (only relevant if PCRE2_UTF was set at compile time)
  • PCRE2_PARTIAL_HARD β€” Return PCRE2_ERROR_PARTIAL for a partial match even if there is a full match
  • PCRE2_PARTIAL_SOFT β€” Return PCRE2_ERROR_PARTIAL for a partial match if no full matches are found
  • PCRE2_DFA_RESTART β€” Restart after a partial match
  • PCRE2_DFA_SHORTEST β€” Return only the shortest match

There are restrictions on what may appear in a pattern when using this matching function. Details are given in the pcre2matching documentation. For details of partial matching, see the pcre2partial page. There is a complete description of the PCRE2 native API in the pcre2api page and a description of the POSIX API in the pcre2posix page.


xoxo, your Unix bestie πŸ’– β€” this page is from PCRE2 10.47, dated 31 August 2021. slay, go match something cute ✨

πŸ“¦ where this page comes from