PCRE_CONFIG(3)

πŸŽ€ PCRE_CONFIG(3) β€” girl, let's talk about your regex library ✨

okay so bestie, this one's from the Library Functions Manual πŸ’– (that's the manual name, we're keeping it, it's part of the lore). It's all about PCRE β€” Perl-compatible regular expressions, no cap πŸ¦‹


🌸 NAME 🌸

PCRE β€” Perl-compatible regular expressions πŸ’…


✨ SYNOPSIS ✨

#include <pcre.h>

int pcre_config(int what, void *where);

int pcre16_config(int what, void *where);

int pcre32_config(int what, void *where);

like, three whole flavors of the same vibe 🫢


πŸ’– DESCRIPTION πŸ’–

So this function? It's literally your little spy πŸ•΅οΈβ™€οΈβœ¨ It lets a client program find out which optional features are available in the version of the PCRE library it's using. Iconic behaviour, honestly.

The arguments are giving:

  • what β€” a code specifying what information is required πŸ‘€
  • where β€” points to where to put the data πŸ“
⚠️ okay so pay attention here bestie: the where argument must point to an integer variable β€” EXCEPT for PCRE_CONFIG_MATCH_LIMIT, PCRE_CONFIG_MATCH_LIMIT_RECURSION, and PCRE_CONFIG_PARENS_LIMIT, where it must point to an unsigned long integer, and for PCRE_CONFIG_JITTARGET, where it must point to a const char*. Don't get this wrong or it's giving chaos 😭

The available codes are:

  • PCRE_CONFIG_JIT β€” availability of just-in-time compiler support (1=yes 0=no) πŸ”₯
  • PCRE_CONFIG_JITTARGET β€” string containing information about the target architecture for the JIT compiler, or NULL if there is no JIT support
  • PCRE_CONFIG_LINK_SIZE β€” internal link size: 2, 3, or 4
  • PCRE_CONFIG_PARENS_LIMIT β€” parentheses nesting limit
  • PCRE_CONFIG_MATCH_LIMIT β€” internal resource limit
  • PCRE_CONFIG_MATCH_LIMIT_RECURSION β€” internal recursion depth limit
  • PCRE_CONFIG_NEWLINE β€” value of the default newline sequence:
    • 13 (0x000d) for CR
    • 10 (0x000a) for LF
    • 3338 (0x0d0a) for CRLF
    • -2 for ANYCRLF
    • -1 for ANY
  • PCRE_CONFIG_BSR β€” indicates what \R matches by default:
    • 0 β€” all Unicode line endings
    • 1 β€” CR, LF, or CRLF only
  • PCRE_CONFIG_POSIX_MALLOC_THRESHOLD β€” threshold of return slots, above which malloc() is used by the POSIX API
  • PCRE_CONFIG_STACKRECURSE β€” recursion implementation (1=stack 0=heap)
  • PCRE_CONFIG_UTF16 β€” availability of UTF-16 support (1=yes 0=no); option for pcre16_config() ⭐
  • PCRE_CONFIG_UTF32 β€” availability of UTF-32 support (1=yes 0=no); option for pcre32_config() ⭐
  • PCRE_CONFIG_UTF8 β€” availability of UTF-8 support (1=yes 0=no); option for pcre_config() ⭐
  • PCRE_CONFIG_UNICODE_PROPERTIES β€” availability of Unicode property support (1=yes 0=no) 🌈

The function yields 0 on success or PCRE_ERROR_BADOPTION otherwise 😀 That error is also given if:

  • PCRE_CONFIG_UTF16 or PCRE_CONFIG_UTF32 is passed to pcre_config()
  • PCRE_CONFIG_UTF8 or PCRE_CONFIG_UTF32 is passed to pcre16_config()
  • PCRE_CONFIG_UTF8 or PCRE_CONFIG_UTF16 is passed to pcre32_config()

like, keep your functions and your options matched, bestie. it's giving compatibility. periodt πŸ’…

There is a complete description of the PCRE native API in the pcreapi page πŸ“– and a description of the POSIX API in the pcreposix page πŸ“– β€” go read those if you want the full tea.


mwah πŸ’œ that's the whole page. this one's from PCRE 8.36, dated 20 April 2014 β€” vintage but still slaying, fr fr. go forth and pcre_config() responsibly, queen πŸ‘‘βœ¨