# Method Regexp.PCRE._pcre()->exec()

Method exec

  ``int`|`array` exec(`string` `subject`, `void`|`int` `startoffset`)`

Description

  Matches the regexp against `subject`, starting at `startoffset` if it is given.

  If the match is successful, the return value is an array that holds the offsets of all matches:

  Elements 0 and 1 have the start and end offsets, respectively, of the match for the whole regexp. The start offset is inclusive while the end is exclusive, i.e. the matching string is `<code class='reference paramref'>subject`[res[0]..res[1]-1].

  Elements 2 and 3 have the offsets of the first capturing submatch (if any) in the same way, elements 4 and 5 are for the second capturing submatch, etc. If a submatch didn't match anything, the corresponding elements are set to -1. If a submatch has matched successfully several times, the offsets of the last match are returned.

  The returned array is always of length 2*n + 1, where n is the total number of capturing submatches in the regexp.

  If there is an error, an integer error code is returned:

  ``ERROR.NOMATCH`` | The subject string did not match the pattern.
  ``ERROR.NULL`` | Either code or subject was passed as NULL, or ovector was NULL and oversize was not zero.
  ``ERROR.BADOPTION`` | An unrecognized bit was set in the options argument.
  ``ERROR.BADMAGIC`` | PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch the case when it is passed a junk pointer. This is the error it gives when the magic number isn't present.
  ``ERROR.UNKNOWN_NODE`` | While running the pattern match, an unknown item was encountered in the compiled pattern. This error could be caused by a bug in PCRE or by overwriting of the compiled pattern.
  ``ERROR.NOMEMORY`` | If a pattern contains back references, but the ovector that is passed to pcre_exec() is not big enough to remember the referenced substrings, PCRE gets a block of memory at the start of matching to use for this purpose. If the call via pcre_malloc() fails, this error is given. The memory is freed at the end of matching.
  ``ERROR.NOSUBSTRING`` | This error is used by the pcre_copy_substring(), pcre_get_substring(), and pcre_get_substring_list() functions (see below). It is never returned by pcre_exec().
  ``ERROR.MATCHLIMIT`` | The recursion and backtracking limit, as specified by the match_limit field in a pcre_extra structure (or defaulted) was reached. See the description above.
  ``ERROR.CALLOUT`` | This error is never generated by pcre_exec() itself. It is provided for use by callout functions that want to yield a distinctive error code. See the pcrecallout documentation for details.