Ruby: RRegexp Struct Reference

Ruby 3.4.3p32 (2025-04-14 revision d0b7e5b6a04bde21ca483d20a1546b28b401c2d4)

Data Fields
RRegexp Struct Reference

Ruby's regular expression. More...

`#include <rregexp.h>`

## Data Fields
struct RBasic | basic
| Basic part, including flags and class.
struct re_pattern_buffer * | ptr
| The pattern buffer.
const VALUE | src
| Source code of this expression.
unsigned long | usecnt
| Reference count.

## Detailed Description

Ruby's regular expression.

A regexp is compiled into its own intermediate representation. This one holds that info. Regexp "match" operation then executes that IR.

Definition at line 60 of file rregexp.h.

## Field Documentation

## ◆ basic

struct RBasic RRegexp::basic

Basic part, including flags and class.

Definition at line 63 of file rregexp.h.

## ◆ ptr

struct re_pattern_buffer* RRegexp::ptr

The pattern buffer.

This is a quasi-opaque struct that holds compiled intermediate representation of the regular expression.

Note
  Compilation of a regexp could be delayed until actual match.

Definition at line 71 of file rregexp.h.

## ◆ src

const VALUE RRegexp::src

Source code of this expression.

Definition at line 74 of file rregexp.h.

Referenced by rb_enc_reg_new().

## ◆ usecnt

unsigned long RRegexp::usecnt

Reference count.

A regexp match can take extraordinarily long time to run. Ruby's regular expression is heavily extended and not a regular language any longer; runs in NP-time in practice. Now, Ruby also has threads and GVL. In order to prevent long GVL lockup, our regexp engine can release it on occasions. This means that multiple threads can touch a regular expressions at once. That itself is okay. But their cleanup phase shall wait for all the concurrent runs, to prevent use-after-free situation. This field is used to count such threads that are executing this particular pattern buffer.

Warning
  Of course, touching this field from extension libraries causes catastrophic effects. Just leave it.

Definition at line 90 of file rregexp.h.

The documentation for this struct was generated from the following file:

- include/ruby/internal/core/rregexp.h