1457 lines
		
	
	
		
			56 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			1457 lines
		
	
	
		
			56 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .TH PCRE2TEST 1 "20 May 2015" "PCRE 10.20"
 | |
| .SH NAME
 | |
| pcre2test - a program for testing Perl-compatible regular expressions.
 | |
| .SH SYNOPSIS
 | |
| .rs
 | |
| .sp
 | |
| .B pcre2test "[options] [input file [output file]]"
 | |
| .sp
 | |
| \fBpcre2test\fP is a test program for the PCRE2 regular expression libraries,
 | |
| but it can also be used for experimenting with regular expressions. This
 | |
| document describes the features of the test program; for details of the regular
 | |
| expressions themselves, see the
 | |
| .\" HREF
 | |
| \fBpcre2pattern\fP
 | |
| .\"
 | |
| documentation. For details of the PCRE2 library function calls and their
 | |
| options, see the
 | |
| .\" HREF
 | |
| \fBpcre2api\fP
 | |
| .\"
 | |
| documentation.
 | |
| .P
 | |
| The input for \fBpcre2test\fP is a sequence of regular expression patterns and
 | |
| subject strings to be matched. There are also command lines for setting
 | |
| defaults and controlling some special actions. The output shows the result of
 | |
| each match attempt. Modifiers on external or internal command lines, the
 | |
| patterns, and the subject lines specify PCRE2 function options, control how the
 | |
| subject is processed, and what output is produced.
 | |
| .P
 | |
| As the original fairly simple PCRE library evolved, it acquired many different
 | |
| features, and as a result, the original \fBpcretest\fP program ended up with a
 | |
| lot of options in a messy, arcane syntax, for testing all the features. The
 | |
| move to the new PCRE2 API provided an opportunity to re-implement the test
 | |
| program as \fBpcre2test\fP, with a cleaner modifier syntax. Nevertheless, there
 | |
| are still many obscure modifiers, some of which are specifically designed for
 | |
| use in conjunction with the test script and data files that are distributed as
 | |
| part of PCRE2. All the modifiers are documented here, some without much
 | |
| justification, but many of them are unlikely to be of use except when testing
 | |
| the libraries.
 | |
| .
 | |
| .
 | |
| .SH "PCRE2's 8-BIT, 16-BIT AND 32-BIT LIBRARIES"
 | |
| .rs
 | |
| .sp
 | |
| Different versions of the PCRE2 library can be built to support character
 | |
| strings that are encoded in 8-bit, 16-bit, or 32-bit code units. One, two, or
 | |
| all three of these libraries may be simultaneously installed. The
 | |
| \fBpcre2test\fP program can be used to test all the libraries. However, its own
 | |
| input and output are always in 8-bit format. When testing the 16-bit or 32-bit
 | |
| libraries, patterns and subject strings are converted to 16- or 32-bit format
 | |
| before being passed to the library functions. Results are converted back to
 | |
| 8-bit code units for output.
 | |
| .P
 | |
| In the rest of this document, the names of library functions and structures
 | |
| are given in generic form, for example, \fBpcre_compile()\fP. The actual
 | |
| names used in the libraries have a suffix _8, _16, or _32, as appropriate.
 | |
| .
 | |
| .
 | |
| .SH "INPUT ENCODING"
 | |
| .rs
 | |
| .sp
 | |
| Input to \fBpcre2test\fP is processed line by line, either by calling the C
 | |
| library's \fBfgets()\fP function, or via the \fBlibreadline\fP library (see
 | |
| below). The input is processed using using C's string functions, so must not
 | |
| contain binary zeroes, even though in Unix-like environments, \fBfgets()\fP
 | |
| treats any bytes other than newline as data characters. In some Windows
 | |
| environments character 26 (hex 1A) causes an immediate end of file, and no
 | |
| further data is read.
 | |
| .P
 | |
| For maximum portability, therefore, it is safest to avoid non-printing
 | |
| characters in \fBpcre2test\fP input files. There is a facility for specifying a
 | |
| pattern's characters as hexadecimal pairs, thus making it possible to include
 | |
| binary zeroes in a pattern for testing purposes. Subject lines are processed
 | |
| for backslash escapes, which makes it possible to include any data value.
 | |
| .
 | |
| .
 | |
| .SH "COMMAND LINE OPTIONS"
 | |
| .rs
 | |
| .TP 10
 | |
| \fB-8\fP
 | |
| If the 8-bit library has been built, this option causes it to be used (this is
 | |
| the default). If the 8-bit library has not been built, this option causes an
 | |
| error.
 | |
| .TP 10
 | |
| \fB-16\fP
 | |
| If the 16-bit library has been built, this option causes it to be used. If only
 | |
| the 16-bit library has been built, this is the default. If the 16-bit library
 | |
| has not been built, this option causes an error.
 | |
| .TP 10
 | |
| \fB-32\fP
 | |
| If the 32-bit library has been built, this option causes it to be used. If only
 | |
| the 32-bit library has been built, this is the default. If the 32-bit library
 | |
| has not been built, this option causes an error.
 | |
| .TP 10
 | |
| \fB-b\fP
 | |
| Behave as if each pattern has the \fB/fullbincode\fP modifier; the full
 | |
| internal binary form of the pattern is output after compilation.
 | |
| .TP 10
 | |
| \fB-C\fP
 | |
| Output the version number of the PCRE2 library, and all available information
 | |
| about the optional features that are included, and then exit with zero exit
 | |
| code. All other options are ignored.
 | |
| .TP 10
 | |
| \fB-C\fP \fIoption\fP
 | |
| Output information about a specific build-time option, then exit. This
 | |
| functionality is intended for use in scripts such as \fBRunTest\fP. The
 | |
| following options output the value and set the exit code as indicated:
 | |
| .sp
 | |
|   ebcdic-nl  the code for LF (= NL) in an EBCDIC environment:
 | |
|                0x15 or 0x25
 | |
|                0 if used in an ASCII environment
 | |
|                exit code is always 0
 | |
|   linksize   the configured internal link size (2, 3, or 4)
 | |
|                exit code is set to the link size
 | |
|   newline    the default newline setting:
 | |
|                CR, LF, CRLF, ANYCRLF, or ANY
 | |
|                exit code is always 0
 | |
|   bsr        the default setting for what \eR matches:
 | |
|                ANYCRLF or ANY
 | |
|                exit code is always 0
 | |
| .sp
 | |
| The following options output 1 for true or 0 for false, and set the exit code
 | |
| to the same value:
 | |
| .sp
 | |
|   ebcdic     compiled for an EBCDIC environment
 | |
|   jit        just-in-time support is available
 | |
|   pcre2-16   the 16-bit library was built
 | |
|   pcre2-32   the 32-bit library was built
 | |
|   pcre2-8    the 8-bit library was built
 | |
|   unicode    Unicode support is available
 | |
| .sp
 | |
| If an unknown option is given, an error message is output; the exit code is 0.
 | |
| .TP 10
 | |
| \fB-d\fP
 | |
| Behave as if each pattern has the \fBdebug\fP modifier; the internal
 | |
| form and information about the compiled pattern is output after compilation;
 | |
| \fB-d\fP is equivalent to \fB-b -i\fP.
 | |
| .TP 10
 | |
| \fB-dfa\fP
 | |
| Behave as if each subject line has the \fBdfa\fP modifier; matching is done
 | |
| using the \fBpcre2_dfa_match()\fP function instead of the default
 | |
| \fBpcre2_match()\fP.
 | |
| .TP 10
 | |
| \fB-help\fP
 | |
| Output a brief summary these options and then exit.
 | |
| .TP 10
 | |
| \fB-i\fP
 | |
| Behave as if each pattern has the \fB/info\fP modifier; information about the
 | |
| compiled pattern is given after compilation.
 | |
| .TP 10
 | |
| \fB-jit\fP
 | |
| Behave as if each pattern line has the \fBjit\fP modifier; after successful
 | |
| compilation, each pattern is passed to the just-in-time compiler, if available.
 | |
| .TP 10
 | |
| \fB-pattern\fB \fImodifier-list\fP
 | |
| Behave as if each pattern line contains the given modifiers.
 | |
| .TP 10
 | |
| \fB-q\fP
 | |
| Do not output the version number of \fBpcre2test\fP at the start of execution.
 | |
| .TP 10
 | |
| \fB-S\fP \fIsize\fP
 | |
| On Unix-like systems, set the size of the run-time stack to \fIsize\fP
 | |
| megabytes.
 | |
| .TP 10
 | |
| \fB-subject\fP \fImodifier-list\fP
 | |
| Behave as if each subject line contains the given modifiers.
 | |
| .TP 10
 | |
| \fB-t\fP
 | |
| Run each compile and match many times with a timer, and output the resulting
 | |
| times per compile or match. When JIT is used, separate times are given for the
 | |
| initial compile and the JIT compile. You can control the number of iterations
 | |
| that are used for timing by following \fB-t\fP with a number (as a separate
 | |
| item on the command line). For example, "-t 1000" iterates 1000 times. The
 | |
| default is to iterate 500,000 times.
 | |
| .TP 10
 | |
| \fB-tm\fP
 | |
| This is like \fB-t\fP except that it times only the matching phase, not the
 | |
| compile phase.
 | |
| .TP 10
 | |
| \fB-T\fP \fB-TM\fP
 | |
| These behave like \fB-t\fP and \fB-tm\fP, but in addition, at the end of a run,
 | |
| the total times for all compiles and matches are output.
 | |
| .TP 10
 | |
| \fB-version\fP
 | |
| Output the PCRE2 version number and then exit.
 | |
| .
 | |
| .
 | |
| .SH "DESCRIPTION"
 | |
| .rs
 | |
| .sp
 | |
| If \fBpcre2test\fP is given two filename arguments, it reads from the first and
 | |
| writes to the second. If the first name is "-", input is taken from the
 | |
| standard input. If \fBpcre2test\fP is given only one argument, it reads from
 | |
| that file and writes to stdout. Otherwise, it reads from stdin and writes to
 | |
| stdout.
 | |
| .P
 | |
| When \fBpcre2test\fP is built, a configuration option can specify that it
 | |
| should be linked with the \fBlibreadline\fP or \fBlibedit\fP library. When this
 | |
| is done, if the input is from a terminal, it is read using the \fBreadline()\fP
 | |
| function. This provides line-editing and history facilities. The output from
 | |
| the \fB-help\fP option states whether or not \fBreadline()\fP will be used.
 | |
| .P
 | |
| The program handles any number of tests, each of which consists of a set of
 | |
| input lines. Each set starts with a regular expression pattern, followed by any
 | |
| number of subject lines to be matched against that pattern. In between sets of
 | |
| test data, command lines that begin with # may appear. This file format, with
 | |
| some restrictions, can also be processed by the \fBperltest.sh\fP script that
 | |
| is distributed with PCRE2 as a means of checking that the behaviour of PCRE2
 | |
| and Perl is the same.
 | |
| .P
 | |
| When the input is a terminal, \fBpcre2test\fP prompts for each line of input,
 | |
| using "re>" to prompt for regular expression patterns, and "data>" to prompt
 | |
| for subject lines. Command lines starting with # can be entered only in
 | |
| response to the "re>" prompt.
 | |
| .P
 | |
| Each subject line is matched separately and independently. If you want to do
 | |
| multi-line matches, you have to use the \en escape sequence (or \er or \er\en,
 | |
| etc., depending on the newline setting) in a single line of input to encode the
 | |
| newline sequences. There is no limit on the length of subject lines; the input
 | |
| buffer is automatically extended if it is too small. There is a replication
 | |
| feature that makes it possible to generate long subject lines without having to
 | |
| supply them explicitly.
 | |
| .P
 | |
| An empty line or the end of the file signals the end of the subject lines for a
 | |
| test, at which point a new pattern or command line is expected if there is
 | |
| still input to be read.
 | |
| .
 | |
| .
 | |
| .SH "COMMAND LINES"
 | |
| .rs
 | |
| .sp
 | |
| In between sets of test data, a line that begins with # is interpreted as a
 | |
| command line. If the first character is followed by white space or an
 | |
| exclamation mark, the line is treated as a comment, and ignored. Otherwise, the
 | |
| following commands are recognized:
 | |
| .sp
 | |
|   #forbid_utf
 | |
| .sp
 | |
| Subsequent patterns automatically have the PCRE2_NEVER_UTF and PCRE2_NEVER_UCP
 | |
| options set, which locks out the use of the PCRE2_UTF and PCRE2_UCP options and
 | |
| the use of (*UTF) and (*UCP) at the start of patterns. This command also forces
 | |
| an error if a subsequent pattern contains any occurrences of \eP, \ep, or \eX,
 | |
| which are still supported when PCRE2_UTF is not set, but which require Unicode
 | |
| property support to be included in the library.
 | |
| .P
 | |
| This is a trigger guard that is used in test files to ensure that UTF or
 | |
| Unicode property tests are not accidentally added to files that are used when
 | |
| Unicode support is not included in the library. Setting PCRE2_NEVER_UTF and
 | |
| PCRE2_NEVER_UCP as a default can also be obtained by the use of \fB#pattern\fP;
 | |
| the difference is that \fB#forbid_utf\fP cannot be unset, and the automatic
 | |
| options are not displayed in pattern information, to avoid cluttering up test
 | |
| output.
 | |
| .sp
 | |
|   #load <filename>
 | |
| .sp
 | |
| This command is used to load a set of precompiled patterns from a file, as
 | |
| described in the section entitled "Saving and restoring compiled patterns"
 | |
| .\" HTML <a href="#saverestore">
 | |
| .\" </a>
 | |
| below.
 | |
| .\"
 | |
| .sp
 | |
|   #pattern <modifier-list>
 | |
| .sp
 | |
| This command sets a default modifier list that applies to all subsequent
 | |
| patterns. Modifiers on a pattern can change these settings.
 | |
| .sp
 | |
|   #perltest
 | |
| .sp
 | |
| The appearance of this line causes all subsequent modifier settings to be
 | |
| checked for compatibility with the \fBperltest.sh\fP script, which is used to
 | |
| confirm that Perl gives the same results as PCRE2. Also, apart from comment
 | |
| lines, none of the other command lines are permitted, because they and many
 | |
| of the modifiers are specific to \fBpcre2test\fP, and should not be used in
 | |
| test files that are also processed by \fBperltest.sh\fP. The \fB#perltest\fP
 | |
| command helps detect tests that are accidentally put in the wrong file.
 | |
| .sp
 | |
|   #pop [<modifiers>]
 | |
| .sp
 | |
| This command is used to manipulate the stack of compiled patterns, as described
 | |
| in the section entitled "Saving and restoring compiled patterns"
 | |
| .\" HTML <a href="#saverestore">
 | |
| .\" </a>
 | |
| below.
 | |
| .\"
 | |
| .sp
 | |
|   #save <filename>
 | |
| .sp
 | |
| This command is used to save a set of compiled patterns to a file, as described
 | |
| in the section entitled "Saving and restoring compiled patterns"
 | |
| .\" HTML <a href="#saverestore">
 | |
| .\" </a>
 | |
| below.
 | |
| .\"
 | |
| .sp
 | |
|   #subject <modifier-list>
 | |
| .sp
 | |
| This command sets a default modifier list that applies to all subsequent
 | |
| subject lines. Modifiers on a subject line can change these settings.
 | |
| .
 | |
| .
 | |
| .SH "MODIFIER SYNTAX"
 | |
| .rs
 | |
| .sp
 | |
| Modifier lists are used with both pattern and subject lines. Items in a list
 | |
| are separated by commas and optional white space. Some modifiers may be given
 | |
| for both patterns and subject lines, whereas others are valid for one or the
 | |
| other only. Each modifier has a long name, for example "anchored", and some of
 | |
| them must be followed by an equals sign and a value, for example, "offset=12".
 | |
| Modifiers that do not take values may be preceded by a minus sign to turn off a
 | |
| previous setting.
 | |
| .P
 | |
| A few of the more common modifiers can also be specified as single letters, for
 | |
| example "i" for "caseless". In documentation, following the Perl convention,
 | |
| these are written with a slash ("the /i modifier") for clarity. Abbreviated
 | |
| modifiers must all be concatenated in the first item of a modifier list. If the
 | |
| first item is not recognized as a long modifier name, it is interpreted as a
 | |
| sequence of these abbreviations. For example:
 | |
| .sp
 | |
|   /abc/ig,newline=cr,jit=3
 | |
| .sp
 | |
| This is a pattern line whose modifier list starts with two one-letter modifiers
 | |
| (/i and /g). The lower-case abbreviated modifiers are the same as used in Perl.
 | |
| .
 | |
| .
 | |
| .SH "PATTERN SYNTAX"
 | |
| .rs
 | |
| .sp
 | |
| A pattern line must start with one of the following characters (common symbols,
 | |
| excluding pattern meta-characters):
 | |
| .sp
 | |
|   / ! " ' ` - = _ : ; , % & @ ~
 | |
| .sp
 | |
| This is interpreted as the pattern's delimiter. A regular expression may be
 | |
| continued over several input lines, in which case the newline characters are
 | |
| included within it. It is possible to include the delimiter within the pattern
 | |
| by escaping it with a backslash, for example
 | |
| .sp
 | |
|   /abc\e/def/
 | |
| .sp
 | |
| If you do this, the escape and the delimiter form part of the pattern, but
 | |
| since the delimiters are all non-alphanumeric, this does not affect its
 | |
| interpretation. If the terminating delimiter is immediately followed by a
 | |
| backslash, for example,
 | |
| .sp
 | |
|   /abc/\e
 | |
| .sp
 | |
| then a backslash is added to the end of the pattern. This is done to provide a
 | |
| way of testing the error condition that arises if a pattern finishes with a
 | |
| backslash, because
 | |
| .sp
 | |
|   /abc\e/
 | |
| .sp
 | |
| is interpreted as the first line of a pattern that starts with "abc/", causing
 | |
| pcre2test to read the next line as a continuation of the regular expression.
 | |
| .P
 | |
| A pattern can be followed by a modifier list (details below).
 | |
| .
 | |
| .
 | |
| .SH "SUBJECT LINE SYNTAX"
 | |
| .rs
 | |
| .sp
 | |
| Before each subject line is passed to \fBpcre2_match()\fP or
 | |
| \fBpcre2_dfa_match()\fP, leading and trailing white space is removed, and the
 | |
| line is scanned for backslash escapes. The following provide a means of
 | |
| encoding non-printing characters in a visible way:
 | |
| .sp
 | |
|   \ea         alarm (BEL, \ex07)
 | |
|   \eb         backspace (\ex08)
 | |
|   \ee         escape (\ex27)
 | |
|   \ef         form feed (\ex0c)
 | |
|   \en         newline (\ex0a)
 | |
|   \er         carriage return (\ex0d)
 | |
|   \et         tab (\ex09)
 | |
|   \ev         vertical tab (\ex0b)
 | |
|   \ennn       octal character (up to 3 octal digits); always
 | |
|                a byte unless > 255 in UTF-8 or 16-bit or 32-bit mode
 | |
|   \eo{dd...}  octal character (any number of octal digits}
 | |
|   \exhh       hexadecimal byte (up to 2 hex digits)
 | |
|   \ex{hh...}  hexadecimal character (any number of hex digits)
 | |
| .sp
 | |
| The use of \ex{hh...} is not dependent on the use of the \fButf\fP modifier on
 | |
| the pattern. It is recognized always. There may be any number of hexadecimal
 | |
| digits inside the braces; invalid values provoke error messages.
 | |
| .P
 | |
| Note that \exhh specifies one byte rather than one character in UTF-8 mode;
 | |
| this makes it possible to construct invalid UTF-8 sequences for testing
 | |
| purposes. On the other hand, \ex{hh} is interpreted as a UTF-8 character in
 | |
| UTF-8 mode, generating more than one byte if the value is greater than 127.
 | |
| When testing the 8-bit library not in UTF-8 mode, \ex{hh} generates one byte
 | |
| for values less than 256, and causes an error for greater values.
 | |
| .P
 | |
| In UTF-16 mode, all 4-digit \ex{hhhh} values are accepted. This makes it
 | |
| possible to construct invalid UTF-16 sequences for testing purposes.
 | |
| .P
 | |
| In UTF-32 mode, all 4- to 8-digit \ex{...} values are accepted. This makes it
 | |
| possible to construct invalid UTF-32 sequences for testing purposes.
 | |
| .P
 | |
| There is a special backslash sequence that specifies replication of one or more
 | |
| characters:
 | |
| .sp
 | |
|   \e[<characters>]{<count>}
 | |
| .sp
 | |
| This makes it possible to test long strings without having to provide them as
 | |
| part of the file. For example:
 | |
| .sp
 | |
|   \e[abc]{4}
 | |
| .sp
 | |
| is converted to "abcabcabcabc". This feature does not support nesting. To
 | |
| include a closing square bracket in the characters, code it as \ex5D.
 | |
| .P
 | |
| A backslash followed by an equals sign marks the end of the subject string and
 | |
| the start of a modifier list. For example:
 | |
| .sp
 | |
|   abc\e=notbol,notempty
 | |
| .sp
 | |
| A backslash followed by any other non-alphanumeric character just escapes that
 | |
| character. A backslash followed by anything else causes an error. However, if
 | |
| the very last character in the line is a backslash (and there is no modifier
 | |
| list), it is ignored. This gives a way of passing an empty line as data, since
 | |
| a real empty line terminates the data input.
 | |
| .
 | |
| .
 | |
| .SH "PATTERN MODIFIERS"
 | |
| .rs
 | |
| .sp
 | |
| There are three types of modifier that can appear in pattern lines, two of
 | |
| which may also be used in a \fB#pattern\fP command. A pattern's modifier list
 | |
| can add to or override default modifiers that were set by a previous
 | |
| \fB#pattern\fP command.
 | |
| .
 | |
| .
 | |
| .\" HTML <a name="optionmodifiers"></a>
 | |
| .SS "Setting compilation options"
 | |
| .rs
 | |
| .sp
 | |
| The following modifiers set options for \fBpcre2_compile()\fP. The most common
 | |
| ones have single-letter abbreviations. See
 | |
| .\" HREF
 | |
| \fBpcreapi\fP
 | |
| .\"
 | |
| for a description of their effects.
 | |
| .sp
 | |
|       allow_empty_class         set PCRE2_ALLOW_EMPTY_CLASS
 | |
|       alt_bsux                  set PCRE2_ALT_BSUX
 | |
|       alt_circumflex            set PCRE2_ALT_CIRCUMFLEX
 | |
|       anchored                  set PCRE2_ANCHORED
 | |
|       auto_callout              set PCRE2_AUTO_CALLOUT
 | |
|   /i  caseless                  set PCRE2_CASELESS
 | |
|       dollar_endonly            set PCRE2_DOLLAR_ENDONLY
 | |
|   /s  dotall                    set PCRE2_DOTALL
 | |
|       dupnames                  set PCRE2_DUPNAMES
 | |
|   /x  extended                  set PCRE2_EXTENDED
 | |
|       firstline                 set PCRE2_FIRSTLINE
 | |
|       match_unset_backref       set PCRE2_MATCH_UNSET_BACKREF
 | |
|   /m  multiline                 set PCRE2_MULTILINE
 | |
|       never_backslash_c         set PCRE2_NEVER_BACKSLASH_C
 | |
|       never_ucp                 set PCRE2_NEVER_UCP
 | |
|       never_utf                 set PCRE2_NEVER_UTF
 | |
|       no_auto_capture           set PCRE2_NO_AUTO_CAPTURE
 | |
|       no_auto_possess           set PCRE2_NO_AUTO_POSSESS
 | |
|       no_dotstar_anchor         set PCRE2_NO_DOTSTAR_ANCHOR
 | |
|       no_start_optimize         set PCRE2_NO_START_OPTIMIZE
 | |
|       no_utf_check              set PCRE2_NO_UTF_CHECK
 | |
|       ucp                       set PCRE2_UCP
 | |
|       ungreedy                  set PCRE2_UNGREEDY
 | |
|       utf                       set PCRE2_UTF
 | |
| .sp
 | |
| As well as turning on the PCRE2_UTF option, the \fButf\fP modifier causes all
 | |
| non-printing characters in output strings to be printed using the \ex{hh...}
 | |
| notation. Otherwise, those less than 0x100 are output in hex without the curly
 | |
| brackets.
 | |
| .
 | |
| .
 | |
| .\" HTML <a name="controlmodifiers"></a>
 | |
| .SS "Setting compilation controls"
 | |
| .rs
 | |
| .sp
 | |
| The following modifiers affect the compilation process or request information
 | |
| about the pattern:
 | |
| .sp
 | |
|       bsr=[anycrlf|unicode]     specify \eR handling
 | |
|   /B  bincode                   show binary code without lengths
 | |
|       callout_info              show callout information
 | |
|       debug                     same as info,fullbincode
 | |
|       fullbincode               show binary code with lengths
 | |
|   /I  info                      show info about compiled pattern
 | |
|       hex                       pattern is coded in hexadecimal
 | |
|       jit[=<number>]            use JIT
 | |
|       jitfast                   use JIT fast path
 | |
|       jitverify                 verify JIT use
 | |
|       locale=<name>             use this locale
 | |
|       memory                    show memory used
 | |
|       newline=<type>            set newline type
 | |
|       parens_nest_limit=<n>     set maximum parentheses depth
 | |
|       posix                     use the POSIX API
 | |
|       push                      push compiled pattern onto the stack
 | |
|       stackguard=<number>       test the stackguard feature
 | |
|       tables=[0|1|2]            select internal tables
 | |
| .sp
 | |
| The effects of these modifiers are described in the following sections.
 | |
| .
 | |
| .
 | |
| .SS "Newline and \eR handling"
 | |
| .rs
 | |
| .sp
 | |
| The \fBbsr\fP modifier specifies what \eR in a pattern should match. If it is
 | |
| set to "anycrlf", \eR matches CR, LF, or CRLF only. If it is set to "unicode",
 | |
| \eR matches any Unicode newline sequence. The default is specified when PCRE2
 | |
| is built, with the default default being Unicode.
 | |
| .P
 | |
| The \fBnewline\fP modifier specifies which characters are to be interpreted as
 | |
| newlines, both in the pattern and in subject lines. The type must be one of CR,
 | |
| LF, CRLF, ANYCRLF, or ANY (in upper or lower case).
 | |
| .
 | |
| .
 | |
| .SS "Information about a pattern"
 | |
| .rs
 | |
| .sp
 | |
| The \fBdebug\fP modifier is a shorthand for \fBinfo,fullbincode\fP, requesting
 | |
| all available information.
 | |
| .P
 | |
| The \fBbincode\fP modifier causes a representation of the compiled code to be
 | |
| output after compilation. This information does not contain length and offset
 | |
| values, which ensures that the same output is generated for different internal
 | |
| link sizes and different code unit widths. By using \fBbincode\fP, the same
 | |
| regression tests can be used in different environments.
 | |
| .P
 | |
| The \fBfullbincode\fP modifier, by contrast, \fIdoes\fP include length and
 | |
| offset values. This is used in a few special tests that run only for specific
 | |
| code unit widths and link sizes, and is also useful for one-off tests.
 | |
| .P
 | |
| The \fBinfo\fP modifier requests information about the compiled pattern
 | |
| (whether it is anchored, has a fixed first character, and so on). The
 | |
| information is obtained from the \fBpcre2_pattern_info()\fP function. Here are
 | |
| some typical examples:
 | |
| .sp
 | |
|     re> /(?i)(^a|^b)/m,info
 | |
|   Capturing subpattern count = 1
 | |
|   Compile options: multiline
 | |
|   Overall options: caseless multiline
 | |
|   First code unit at start or follows newline
 | |
|   Subject length lower bound = 1
 | |
| .sp
 | |
|     re> /(?i)abc/info
 | |
|   Capturing subpattern count = 0
 | |
|   Compile options: <none>
 | |
|   Overall options: caseless
 | |
|   First code unit = 'a' (caseless)
 | |
|   Last code unit = 'c' (caseless)
 | |
|   Subject length lower bound = 3
 | |
| .sp
 | |
| "Compile options" are those specified by modifiers; "overall options" have
 | |
| added options that are taken or deduced from the pattern. If both sets of
 | |
| options are the same, just a single "options" line is output; if there are no
 | |
| options, the line is omitted. "First code unit" is where any match must start;
 | |
| if there is more than one they are listed as "starting code units". "Last code
 | |
| unit" is the last literal code unit that must be present in any match. This is
 | |
| not necessarily the last character. These lines are omitted if no starting or
 | |
| ending code units are recorded.
 | |
| .P
 | |
| The \fBcallout_info\fP modifier requests information about all the callouts in
 | |
| the pattern. A list of them is output at the end of any other information that
 | |
| is requested. For each callout, either its number or string is given, followed
 | |
| by the item that follows it in the pattern.
 | |
| .
 | |
| .
 | |
| .SS "Specifying a pattern in hex"
 | |
| .rs
 | |
| .sp
 | |
| The \fBhex\fP modifier specifies that the characters of the pattern are to be
 | |
| interpreted as pairs of hexadecimal digits. White space is permitted between
 | |
| pairs. For example:
 | |
| .sp
 | |
|   /ab 32 59/hex
 | |
| .sp
 | |
| This feature is provided as a way of creating patterns that contain binary zero
 | |
| and other non-printing characters. By default, \fBpcre2test\fP passes patterns
 | |
| as zero-terminated strings to \fBpcre2_compile()\fP, giving the length as
 | |
| PCRE2_ZERO_TERMINATED. However, for patterns specified in hexadecimal, the
 | |
| actual length of the pattern is passed.
 | |
| .
 | |
| .
 | |
| .SS "JIT compilation"
 | |
| .rs
 | |
| .sp
 | |
| The \fB/jit\fP modifier may optionally be followed by an equals sign and a
 | |
| number in the range 0 to 7:
 | |
| .sp
 | |
|   0  disable JIT
 | |
|   1  use JIT for normal match only
 | |
|   2  use JIT for soft partial match only
 | |
|   3  use JIT for normal match and soft partial match
 | |
|   4  use JIT for hard partial match only
 | |
|   6  use JIT for soft and hard partial match
 | |
|   7  all three modes
 | |
| .sp
 | |
| If no number is given, 7 is assumed. If JIT compilation is successful, the
 | |
| compiled JIT code will automatically be used when \fBpcre2_match()\fP is run
 | |
| for the appropriate type of match, except when incompatible run-time options
 | |
| are specified. For more details, see the
 | |
| .\" HREF
 | |
| \fBpcre2jit\fP
 | |
| .\"
 | |
| documentation. See also the \fBjitstack\fP modifier below for a way of
 | |
| setting the size of the JIT stack.
 | |
| .P
 | |
| If the \fBjitfast\fP modifier is specified, matching is done using the JIT
 | |
| "fast path" interface, \fBpcre2_jit_match()\fP, which skips some of the sanity
 | |
| checks that are done by \fBpcre2_match()\fP, and of course does not work when
 | |
| JIT is not supported. If \fBjitfast\fP is specified without \fBjit\fP, jit=7 is
 | |
| assumed.
 | |
| .P
 | |
| If the \fBjitverify\fP modifier is specified, information about the compiled
 | |
| pattern shows whether JIT compilation was or was not successful. If
 | |
| \fBjitverify\fP is specified without \fBjit\fP, jit=7 is assumed. If JIT
 | |
| compilation is successful when \fBjitverify\fP is set, the text "(JIT)" is
 | |
| added to the first output line after a match or non match when JIT-compiled
 | |
| code was actually used in the match.
 | |
| .
 | |
| .
 | |
| .SS "Setting a locale"
 | |
| .rs
 | |
| .sp
 | |
| The \fB/locale\fP modifier must specify the name of a locale, for example:
 | |
| .sp
 | |
|   /pattern/locale=fr_FR
 | |
| .sp
 | |
| The given locale is set, \fBpcre2_maketables()\fP is called to build a set of
 | |
| character tables for the locale, and this is then passed to
 | |
| \fBpcre2_compile()\fP when compiling the regular expression. The same tables
 | |
| are used when matching the following subject lines. The \fB/locale\fP modifier
 | |
| applies only to the pattern on which it appears, but can be given in a
 | |
| \fB#pattern\fP command if a default is needed. Setting a locale and alternate
 | |
| character tables are mutually exclusive.
 | |
| .
 | |
| .
 | |
| .SS "Showing pattern memory"
 | |
| .rs
 | |
| .sp
 | |
| The \fB/memory\fP modifier causes the size in bytes of the memory used to hold
 | |
| the compiled pattern to be output. This does not include the size of the
 | |
| \fBpcre2_code\fP block; it is just the actual compiled data. If the pattern is
 | |
| subsequently passed to the JIT compiler, the size of the JIT compiled code is
 | |
| also output. Here is an example:
 | |
| .sp
 | |
|     re> /a(b)c/jit,memory
 | |
|   Memory allocation (code space): 21
 | |
|   Memory allocation (JIT code): 1910
 | |
| .sp
 | |
| .
 | |
| .
 | |
| .SS "Limiting nested parentheses"
 | |
| .rs
 | |
| .sp
 | |
| The \fBparens_nest_limit\fP modifier sets a limit on the depth of nested
 | |
| parentheses in a pattern. Breaching the limit causes a compilation error.
 | |
| The default for the library is set when PCRE2 is built, but \fBpcre2test\fP
 | |
| sets its own default of 220, which is required for running the standard test
 | |
| suite.
 | |
| .
 | |
| .
 | |
| .SS "Using the POSIX wrapper API"
 | |
| .rs
 | |
| .sp
 | |
| The \fB/posix\fP modifier causes \fBpcre2test\fP to call PCRE2 via the POSIX
 | |
| wrapper API rather than its native API. This supports only the 8-bit library.
 | |
| When the POSIX API is being used, the following pattern modifiers set options
 | |
| for the \fBregcomp()\fP function:
 | |
| .sp
 | |
|   caseless           REG_ICASE
 | |
|   multiline          REG_NEWLINE
 | |
|   no_auto_capture    REG_NOSUB
 | |
|   dotall             REG_DOTALL     )
 | |
|   ungreedy           REG_UNGREEDY   ) These options are not part of
 | |
|   ucp                REG_UCP        )   the POSIX standard
 | |
|   utf                REG_UTF8       )
 | |
| .sp
 | |
| The \fBaftertext\fP and \fBallaftertext\fP subject modifiers work as described
 | |
| below. All other modifiers cause an error.
 | |
| .
 | |
| .
 | |
| .SS "Testing the stack guard feature"
 | |
| .rs
 | |
| .sp
 | |
| The \fB/stackguard\fP modifier is used to test the use of
 | |
| \fBpcre2_set_compile_recursion_guard()\fP, a function that is provided to
 | |
| enable stack availability to be checked during compilation (see the
 | |
| .\" HREF
 | |
| \fBpcre2api\fP
 | |
| .\"
 | |
| documentation for details). If the number specified by the modifier is greater
 | |
| than zero, \fBpcre2_set_compile_recursion_guard()\fP is called to set up
 | |
| callback from \fBpcre2_compile()\fP to a local function. The argument it
 | |
| receives is the current nesting parenthesis depth; if this is greater than the
 | |
| value given by the modifier, non-zero is returned, causing the compilation to
 | |
| be aborted.
 | |
| .
 | |
| .
 | |
| .SS "Using alternative character tables"
 | |
| .rs
 | |
| .sp
 | |
| The value specified for the \fB/tables\fP modifier must be one of the digits 0,
 | |
| 1, or 2. It causes a specific set of built-in character tables to be passed to
 | |
| \fBpcre2_compile()\fP. This is used in the PCRE2 tests to check behaviour with
 | |
| different character tables. The digit specifies the tables as follows:
 | |
| .sp
 | |
|   0   do not pass any special character tables
 | |
|   1   the default ASCII tables, as distributed in
 | |
|         pcre2_chartables.c.dist
 | |
|   2   a set of tables defining ISO 8859 characters
 | |
| .sp
 | |
| In table 2, some characters whose codes are greater than 128 are identified as
 | |
| letters, digits, spaces, etc. Setting alternate character tables and a locale
 | |
| are mutually exclusive.
 | |
| .
 | |
| .
 | |
| .SS "Setting certain match controls"
 | |
| .rs
 | |
| .sp
 | |
| The following modifiers are really subject modifiers, and are described below.
 | |
| However, they may be included in a pattern's modifier list, in which case they
 | |
| are applied to every subject line that is processed with that pattern. They do
 | |
| not affect the compilation process.
 | |
| .sp
 | |
|       aftertext           show text after match
 | |
|       allaftertext        show text after captures
 | |
|       allcaptures         show all captures
 | |
|       allusedtext         show all consulted text
 | |
|   /g  global              global matching
 | |
|       mark                show mark values
 | |
|       replace=<string>    specify a replacement string
 | |
|       startchar           show starting character when relevant
 | |
| .sp
 | |
| These modifiers may not appear in a \fB#pattern\fP command. If you want them as
 | |
| defaults, set them in a \fB#subject\fP command.
 | |
| .
 | |
| .
 | |
| .SS "Saving a compiled pattern"
 | |
| .rs
 | |
| .sp
 | |
| When a pattern with the \fBpush\fP modifier is successfully compiled, it is
 | |
| pushed onto a stack of compiled patterns, and \fBpcre2test\fP expects the next
 | |
| line to contain a new pattern (or a command) instead of a subject line. This
 | |
| facility is used when saving compiled patterns to a file, as described in the
 | |
| section entitled "Saving and restoring compiled patterns"
 | |
| .\" HTML <a href="#saverestore">
 | |
| .\" </a>
 | |
| below.
 | |
| .\"
 | |
| The \fBpush\fP modifier is incompatible with compilation modifiers such as
 | |
| \fBglobal\fP that act at match time. Any that are specified are ignored, with a
 | |
| warning message, except for \fBreplace\fP, which causes an error. Note that,
 | |
| \fBjitverify\fP, which is allowed, does not carry through to any subsequent
 | |
| matching that uses this pattern.
 | |
| .
 | |
| .
 | |
| .SH "SUBJECT MODIFIERS"
 | |
| .rs
 | |
| .sp
 | |
| The modifiers that can appear in subject lines and the \fB#subject\fP
 | |
| command are of two types.
 | |
| .
 | |
| .
 | |
| .SS "Setting match options"
 | |
| .rs
 | |
| .sp
 | |
| The following modifiers set options for \fBpcre2_match()\fP or
 | |
| \fBpcre2_dfa_match()\fP. See
 | |
| .\" HREF
 | |
| \fBpcreapi\fP
 | |
| .\"
 | |
| for a description of their effects.
 | |
| .sp
 | |
|       anchored                  set PCRE2_ANCHORED
 | |
|       dfa_restart               set PCRE2_DFA_RESTART
 | |
|       dfa_shortest              set PCRE2_DFA_SHORTEST
 | |
|       no_utf_check              set PCRE2_NO_UTF_CHECK
 | |
|       notbol                    set PCRE2_NOTBOL
 | |
|       notempty                  set PCRE2_NOTEMPTY
 | |
|       notempty_atstart          set PCRE2_NOTEMPTY_ATSTART
 | |
|       noteol                    set PCRE2_NOTEOL
 | |
|       partial_hard (or ph)      set PCRE2_PARTIAL_HARD
 | |
|       partial_soft (or ps)      set PCRE2_PARTIAL_SOFT
 | |
| .sp
 | |
| The partial matching modifiers are provided with abbreviations because they
 | |
| appear frequently in tests.
 | |
| .P
 | |
| If the \fB/posix\fP modifier was present on the pattern, causing the POSIX
 | |
| wrapper API to be used, the only option-setting modifiers that have any effect
 | |
| are \fBnotbol\fP, \fBnotempty\fP, and \fBnoteol\fP, causing REG_NOTBOL,
 | |
| REG_NOTEMPTY, and REG_NOTEOL, respectively, to be passed to \fBregexec()\fP.
 | |
| Any other modifiers cause an error.
 | |
| .
 | |
| .
 | |
| .SS "Setting match controls"
 | |
| .rs
 | |
| .sp
 | |
| The following modifiers affect the matching process or request additional
 | |
| information. Some of them may also be specified on a pattern line (see above),
 | |
| in which case they apply to every subject line that is matched against that
 | |
| pattern.
 | |
| .sp
 | |
|       aftertext                 show text after match
 | |
|       allaftertext              show text after captures
 | |
|       allcaptures               show all captures
 | |
|       allusedtext               show all consulted text (non-JIT only)
 | |
|       altglobal                 alternative global matching
 | |
|       callout_capture           show captures at callout time
 | |
|       callout_data=<n>          set a value to pass via callouts
 | |
|       callout_fail=<n>[:<m>]    control callout failure
 | |
|       callout_none              do not supply a callout function
 | |
|       copy=<number or name>     copy captured substring
 | |
|       dfa                       use \fBpcre2_dfa_match()\fP
 | |
|       find_limits               find match and recursion limits
 | |
|       get=<number or name>      extract captured substring
 | |
|       getall                    extract all captured substrings
 | |
|   /g  global                    global matching
 | |
|       jitstack=<n>              set size of JIT stack
 | |
|       mark                      show mark values
 | |
|       match_limit=>n>           set a match limit
 | |
|       memory                    show memory usage
 | |
|       offset=<n>                set starting offset
 | |
|       ovector=<n>               set size of output vector
 | |
|       recursion_limit=<n>       set a recursion limit
 | |
|       replace=<string>          specify a replacement string
 | |
|       startchar                 show startchar when relevant
 | |
|       zero_terminate            pass the subject as zero-terminated
 | |
| .sp
 | |
| The effects of these modifiers are described in the following sections.
 | |
| .
 | |
| .
 | |
| .SS "Showing more text"
 | |
| .rs
 | |
| .sp
 | |
| The \fBaftertext\fP modifier requests that as well as outputting the part of
 | |
| the subject string that matched the entire pattern, \fBpcre2test\fP should in
 | |
| addition output the remainder of the subject string. This is useful for tests
 | |
| where the subject contains multiple copies of the same substring. The
 | |
| \fBallaftertext\fP modifier requests the same action for captured substrings as
 | |
| well as the main matched substring. In each case the remainder is output on the
 | |
| following line with a plus character following the capture number.
 | |
| .P
 | |
| The \fBallusedtext\fP modifier requests that all the text that was consulted
 | |
| during a successful pattern match by the interpreter should be shown. This
 | |
| feature is not supported for JIT matching, and if requested with JIT it is
 | |
| ignored (with a warning message). Setting this modifier affects the output if
 | |
| there is a lookbehind at the start of a match, or a lookahead at the end, or if
 | |
| \eK is used in the pattern. Characters that precede or follow the start and end
 | |
| of the actual match are indicated in the output by '<' or '>' characters
 | |
| underneath them. Here is an example:
 | |
| .sp
 | |
|     re> /(?<=pqr)abc(?=xyz)/
 | |
|   data> 123pqrabcxyz456\e=allusedtext
 | |
|    0: pqrabcxyz
 | |
|       <<<   >>>
 | |
| .sp
 | |
| This shows that the matched string is "abc", with the preceding and following
 | |
| strings "pqr" and "xyz" having been consulted during the match (when processing
 | |
| the assertions).
 | |
| .P
 | |
| The \fBstartchar\fP modifier requests that the starting character for the match
 | |
| be indicated, if it is different to the start of the matched string. The only
 | |
| time when this occurs is when \eK has been processed as part of the match. In
 | |
| this situation, the output for the matched string is displayed from the
 | |
| starting character instead of from the match point, with circumflex characters
 | |
| under the earlier characters. For example:
 | |
| .sp
 | |
|     re> /abc\eKxyz/
 | |
|   data> abcxyz\e=startchar
 | |
|    0: abcxyz
 | |
|       ^^^
 | |
| .sp
 | |
| Unlike \fBallusedtext\fP, the \fBstartchar\fP modifier can be used with JIT.
 | |
| However, these two modifiers are mutually exclusive.
 | |
| .
 | |
| .
 | |
| .SS "Showing the value of all capture groups"
 | |
| .rs
 | |
| .sp
 | |
| The \fBallcaptures\fP modifier requests that the values of all potential
 | |
| captured parentheses be output after a match. By default, only those up to the
 | |
| highest one actually used in the match are output (corresponding to the return
 | |
| code from \fBpcre2_match()\fP). Groups that did not take part in the match
 | |
| are output as "<unset>".
 | |
| .
 | |
| .
 | |
| .SS "Testing callouts"
 | |
| .rs
 | |
| .sp
 | |
| A callout function is supplied when \fBpcre2test\fP calls the library matching
 | |
| functions, unless \fBcallout_none\fP is specified. If \fBcallout_capture\fP is
 | |
| set, the current captured groups are output when a callout occurs.
 | |
| .P
 | |
| The \fBcallout_fail\fP modifier can be given one or two numbers. If there is
 | |
| only one number, 1 is returned instead of 0 when a callout of that number is
 | |
| reached. If two numbers are given, 1 is returned when callout <n> is reached
 | |
| for the <m>th time. Note that callouts with string arguments are always given
 | |
| the number zero. See "Callouts" below for a description of the output when a
 | |
| callout it taken.
 | |
| .P
 | |
| The \fBcallout_data\fP modifier can be given an unsigned or a negative number.
 | |
| This is set as the "user data" that is passed to the matching function, and
 | |
| passed back when the callout function is invoked. Any value other than zero is
 | |
| used as a return from \fBpcre2test\fP's callout function.
 | |
| .
 | |
| .
 | |
| .SS "Finding all matches in a string"
 | |
| .rs
 | |
| .sp
 | |
| Searching for all possible matches within a subject can be requested by the
 | |
| \fBglobal\fP or \fB/altglobal\fP modifier. After finding a match, the matching
 | |
| function is called again to search the remainder of the subject. The difference
 | |
| between \fBglobal\fP and \fBaltglobal\fP is that the former uses the
 | |
| \fIstart_offset\fP argument to \fBpcre2_match()\fP or \fBpcre2_dfa_match()\fP
 | |
| to start searching at a new point within the entire string (which is what Perl
 | |
| does), whereas the latter passes over a shortened subject. This makes a
 | |
| difference to the matching process if the pattern begins with a lookbehind
 | |
| assertion (including \eb or \eB).
 | |
| .P
 | |
| If an empty string is matched, the next match is done with the
 | |
| PCRE2_NOTEMPTY_ATSTART and PCRE2_ANCHORED flags set, in order to search for
 | |
| another, non-empty, match at the same point in the subject. If this match
 | |
| fails, the start offset is advanced, and the normal match is retried. This
 | |
| imitates the way Perl handles such cases when using the \fB/g\fP modifier or
 | |
| the \fBsplit()\fP function. Normally, the start offset is advanced by one
 | |
| character, but if the newline convention recognizes CRLF as a newline, and the
 | |
| current character is CR followed by LF, an advance of two characters occurs.
 | |
| .
 | |
| .
 | |
| .SS "Testing substring extraction functions"
 | |
| .rs
 | |
| .sp
 | |
| The \fBcopy\fP and \fBget\fP modifiers can be used to test the
 | |
| \fBpcre2_substring_copy_xxx()\fP and \fBpcre2_substring_get_xxx()\fP functions.
 | |
| They can be given more than once, and each can specify a group name or number,
 | |
| for example:
 | |
| .sp
 | |
|    abcd\e=copy=1,copy=3,get=G1
 | |
| .sp
 | |
| If the \fB#subject\fP command is used to set default copy and/or get lists,
 | |
| these can be unset by specifying a negative number to cancel all numbered
 | |
| groups and an empty name to cancel all named groups.
 | |
| .P
 | |
| The \fBgetall\fP modifier tests \fBpcre2_substring_list_get()\fP, which
 | |
| extracts all captured substrings.
 | |
| .P
 | |
| If the subject line is successfully matched, the substrings extracted by the
 | |
| convenience functions are output with C, G, or L after the string number
 | |
| instead of a colon. This is in addition to the normal full list. The string
 | |
| length (that is, the return from the extraction function) is given in
 | |
| parentheses after each substring, followed by the name when the extraction was
 | |
| by name.
 | |
| .
 | |
| .
 | |
| .SS "Testing the substitution function"
 | |
| .rs
 | |
| .sp
 | |
| If the \fBreplace\fP modifier is set, the \fBpcre2_substitute()\fP function is
 | |
| called instead of one of the matching functions. Unlike subject strings,
 | |
| \fBpcre2test\fP does not process replacement strings for escape sequences. In
 | |
| UTF mode, a replacement string is checked to see if it is a valid UTF-8 string.
 | |
| If so, it is correctly converted to a UTF string of the appropriate code unit
 | |
| width. If it is not a valid UTF-8 string, the individual code units are copied
 | |
| directly. This provides a means of passing an invalid UTF-8 string for testing
 | |
| purposes.
 | |
| .P
 | |
| If the \fBglobal\fP modifier is set, PCRE2_SUBSTITUTE_GLOBAL is passed to
 | |
| \fBpcre2_substitute()\fP. After a successful substitution, the modified string
 | |
| is output, preceded by the number of replacements. This may be zero if there
 | |
| were no matches. Here is a simple example of a substitution test:
 | |
| .sp
 | |
|   /abc/replace=xxx
 | |
|       =abc=abc=
 | |
|    1: =xxx=abc=
 | |
|       =abc=abc=\e=global
 | |
|    2: =xxx=xxx=
 | |
| .sp
 | |
| Subject and replacement strings should be kept relatively short for
 | |
| substitution tests, as fixed-size buffers are used. To make it easy to test for
 | |
| buffer overflow, if the replacement string starts with a number in square
 | |
| brackets, that number is passed to \fBpcre2_substitute()\fP as the size of the
 | |
| output buffer, with the replacement string starting at the next character. Here
 | |
| is an example that tests the edge case:
 | |
| .sp
 | |
|   /abc/
 | |
|       123abc123\e=replace=[10]XYZ
 | |
|    1: 123XYZ123
 | |
|       123abc123\e=replace=[9]XYZ
 | |
|   Failed: error -47: no more memory
 | |
| .sp
 | |
| A replacement string is ignored with POSIX and DFA matching. Specifying partial
 | |
| matching provokes an error return ("bad option value") from
 | |
| \fBpcre2_substitute()\fP.
 | |
| .
 | |
| .
 | |
| .SS "Setting the JIT stack size"
 | |
| .rs
 | |
| .sp
 | |
| The \fBjitstack\fP modifier provides a way of setting the maximum stack size
 | |
| that is used by the just-in-time optimization code. It is ignored if JIT
 | |
| optimization is not being used. The value is a number of kilobytes. Providing a
 | |
| stack that is larger than the default 32K is necessary only for very
 | |
| complicated patterns.
 | |
| .
 | |
| .
 | |
| .SS "Setting match and recursion limits"
 | |
| .rs
 | |
| .sp
 | |
| The \fBmatch_limit\fP and \fBrecursion_limit\fP modifiers set the appropriate
 | |
| limits in the match context. These values are ignored when the
 | |
| \fBfind_limits\fP modifier is specified.
 | |
| .
 | |
| .
 | |
| .SS "Finding minimum limits"
 | |
| .rs
 | |
| .sp
 | |
| If the \fBfind_limits\fP modifier is present, \fBpcre2test\fP calls
 | |
| \fBpcre2_match()\fP several times, setting different values in the match
 | |
| context via \fBpcre2_set_match_limit()\fP and \fBpcre2_set_recursion_limit()\fP
 | |
| until it finds the minimum values for each parameter that allow
 | |
| \fBpcre2_match()\fP to complete without error.
 | |
| .P
 | |
| If JIT is being used, only the match limit is relevant. If DFA matching is
 | |
| being used, neither limit is relevant, and this modifier is ignored (with a
 | |
| warning message).
 | |
| .P
 | |
| The \fImatch_limit\fP number is a measure of the amount of backtracking
 | |
| that takes place, and learning the minimum value can be instructive. For most
 | |
| simple matches, the number is quite small, but for patterns with very large
 | |
| numbers of matching possibilities, it can become large very quickly with
 | |
| increasing length of subject string. The \fImatch_limit_recursion\fP number is
 | |
| a measure of how much stack (or, if PCRE2 is compiled with NO_RECURSE, how much
 | |
| heap) memory is needed to complete the match attempt.
 | |
| .
 | |
| .
 | |
| .SS "Showing MARK names"
 | |
| .rs
 | |
| .sp
 | |
| .P
 | |
| The \fBmark\fP modifier causes the names from backtracking control verbs that
 | |
| are returned from calls to \fBpcre2_match()\fP to be displayed. If a mark is
 | |
| returned for a match, non-match, or partial match, \fBpcre2test\fP shows it.
 | |
| For a match, it is on a line by itself, tagged with "MK:". Otherwise, it
 | |
| is added to the non-match message.
 | |
| .
 | |
| .
 | |
| .SS "Showing memory usage"
 | |
| .rs
 | |
| .sp
 | |
| The \fBmemory\fP modifier causes \fBpcre2test\fP to log all memory allocation
 | |
| and freeing calls that occur during a match operation.
 | |
| .
 | |
| .
 | |
| .SS "Setting a starting offset"
 | |
| .rs
 | |
| .sp
 | |
| The \fBoffset\fP modifier sets an offset in the subject string at which
 | |
| matching starts. Its value is a number of code units, not characters.
 | |
| .
 | |
| .
 | |
| .SS "Setting the size of the output vector"
 | |
| .rs
 | |
| .sp
 | |
| The \fBovector\fP modifier applies only to the subject line in which it
 | |
| appears, though of course it can also be used to set a default in a
 | |
| \fB#subject\fP command. It specifies the number of pairs of offsets that are
 | |
| available for storing matching information. The default is 15.
 | |
| .P
 | |
| A value of zero is useful when testing the POSIX API because it causes
 | |
| \fBregexec()\fP to be called with a NULL capture vector. When not testing the
 | |
| POSIX API, a value of zero is used to cause
 | |
| \fBpcre2_match_data_create_from_pattern()\fP to be called, in order to create a
 | |
| match block of exactly the right size for the pattern. (It is not possible to
 | |
| create a match block with a zero-length ovector; there is always at least one
 | |
| pair of offsets.)
 | |
| .
 | |
| .
 | |
| .SS "Passing the subject as zero-terminated"
 | |
| .rs
 | |
| .sp
 | |
| By default, the subject string is passed to a native API matching function with
 | |
| its correct length. In order to test the facility for passing a zero-terminated
 | |
| string, the \fBzero_terminate\fP modifier is provided. It causes the length to
 | |
| be passed as PCRE2_ZERO_TERMINATED. (When matching via the POSIX interface,
 | |
| this modifier has no effect, as there is no facility for passing a length.)
 | |
| .P
 | |
| When testing \fBpcre2_substitute()\fP, this modifier also has the effect of
 | |
| passing the replacement string as zero-terminated.
 | |
| .
 | |
| .
 | |
| .SH "THE ALTERNATIVE MATCHING FUNCTION"
 | |
| .rs
 | |
| .sp
 | |
| By default, \fBpcre2test\fP uses the standard PCRE2 matching function,
 | |
| \fBpcre2_match()\fP to match each subject line. PCRE2 also supports an
 | |
| alternative matching function, \fBpcre2_dfa_match()\fP, which operates in a
 | |
| different way, and has some restrictions. The differences between the two
 | |
| functions are described in the
 | |
| .\" HREF
 | |
| \fBpcre2matching\fP
 | |
| .\"
 | |
| documentation.
 | |
| .P
 | |
| If the \fBdfa\fP modifier is set, the alternative matching function is used.
 | |
| This function finds all possible matches at a given point in the subject. If,
 | |
| however, the \fBdfa_shortest\fP modifier is set, processing stops after the
 | |
| first match is found. This is always the shortest possible match.
 | |
| .
 | |
| .
 | |
| .SH "DEFAULT OUTPUT FROM pcre2test"
 | |
| .rs
 | |
| .sp
 | |
| This section describes the output when the normal matching function,
 | |
| \fBpcre2_match()\fP, is being used.
 | |
| .P
 | |
| When a match succeeds, \fBpcre2test\fP outputs the list of captured substrings,
 | |
| starting with number 0 for the string that matched the whole pattern.
 | |
| Otherwise, it outputs "No match" when the return is PCRE2_ERROR_NOMATCH, or
 | |
| "Partial match:" followed by the partially matching substring when the
 | |
| return is PCRE2_ERROR_PARTIAL. (Note that this is the
 | |
| entire substring that was inspected during the partial match; it may include
 | |
| characters before the actual match start if a lookbehind assertion, \eK, \eb,
 | |
| or \eB was involved.)
 | |
| .P
 | |
| For any other return, \fBpcre2test\fP outputs the PCRE2 negative error number
 | |
| and a short descriptive phrase. If the error is a failed UTF string check, the
 | |
| code unit offset of the start of the failing character is also output. Here is
 | |
| an example of an interactive \fBpcre2test\fP run.
 | |
| .sp
 | |
|   $ pcre2test
 | |
|   PCRE2 version 9.00 2014-05-10
 | |
| .sp
 | |
|     re> /^abc(\ed+)/
 | |
|   data> abc123
 | |
|    0: abc123
 | |
|    1: 123
 | |
|   data> xyz
 | |
|   No match
 | |
| .sp
 | |
| Unset capturing substrings that are not followed by one that is set are not
 | |
| shown by \fBpcre2test\fP unless the \fBallcaptures\fP modifier is specified. In
 | |
| the following example, there are two capturing substrings, but when the first
 | |
| data line is matched, the second, unset substring is not shown. An "internal"
 | |
| unset substring is shown as "<unset>", as for the second data line.
 | |
| .sp
 | |
|     re> /(a)|(b)/
 | |
|   data> a
 | |
|    0: a
 | |
|    1: a
 | |
|   data> b
 | |
|    0: b
 | |
|    1: <unset>
 | |
|    2: b
 | |
| .sp
 | |
| If the strings contain any non-printing characters, they are output as \exhh
 | |
| escapes if the value is less than 256 and UTF mode is not set. Otherwise they
 | |
| are output as \ex{hh...} escapes. See below for the definition of non-printing
 | |
| characters. If the \fB/aftertext\fP modifier is set, the output for substring
 | |
| 0 is followed by the the rest of the subject string, identified by "0+" like
 | |
| this:
 | |
| .sp
 | |
|     re> /cat/aftertext
 | |
|   data> cataract
 | |
|    0: cat
 | |
|    0+ aract
 | |
| .sp
 | |
| If global matching is requested, the results of successive matching attempts
 | |
| are output in sequence, like this:
 | |
| .sp
 | |
|     re> /\eBi(\ew\ew)/g
 | |
|   data> Mississippi
 | |
|    0: iss
 | |
|    1: ss
 | |
|    0: iss
 | |
|    1: ss
 | |
|    0: ipp
 | |
|    1: pp
 | |
| .sp
 | |
| "No match" is output only if the first match attempt fails. Here is an example
 | |
| of a failure message (the offset 4 that is specified by the \fBoffset\fP
 | |
| modifier is past the end of the subject string):
 | |
| .sp
 | |
|     re> /xyz/
 | |
|   data> xyz\e=offset=4
 | |
|   Error -24 (bad offset value)
 | |
| .P
 | |
| Note that whereas patterns can be continued over several lines (a plain ">"
 | |
| prompt is used for continuations), subject lines may not. However newlines can
 | |
| be included in a subject by means of the \en escape (or \er, \er\en, etc.,
 | |
| depending on the newline sequence setting).
 | |
| .
 | |
| .
 | |
| .
 | |
| .SH "OUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION"
 | |
| .rs
 | |
| .sp
 | |
| When the alternative matching function, \fBpcre2_dfa_match()\fP, is used, the
 | |
| output consists of a list of all the matches that start at the first point in
 | |
| the subject where there is at least one match. For example:
 | |
| .sp
 | |
|     re> /(tang|tangerine|tan)/
 | |
|   data> yellow tangerine\e=dfa
 | |
|    0: tangerine
 | |
|    1: tang
 | |
|    2: tan
 | |
| .sp
 | |
| Using the normal matching function on this data finds only "tang". The
 | |
| longest matching string is always given first (and numbered zero). After a
 | |
| PCRE2_ERROR_PARTIAL return, the output is "Partial match:", followed by the
 | |
| partially matching substring. Note that this is the entire substring that was
 | |
| inspected during the partial match; it may include characters before the actual
 | |
| match start if a lookbehind assertion, \eb, or \eB was involved. (\eK is not
 | |
| supported for DFA matching.)
 | |
| .P
 | |
| If global matching is requested, the search for further matches resumes
 | |
| at the end of the longest match. For example:
 | |
| .sp
 | |
|     re> /(tang|tangerine|tan)/g
 | |
|   data> yellow tangerine and tangy sultana\e=dfa
 | |
|    0: tangerine
 | |
|    1: tang
 | |
|    2: tan
 | |
|    0: tang
 | |
|    1: tan
 | |
|    0: tan
 | |
| .sp
 | |
| The alternative matching function does not support substring capture, so the
 | |
| modifiers that are concerned with captured substrings are not relevant.
 | |
| .
 | |
| .
 | |
| .SH "RESTARTING AFTER A PARTIAL MATCH"
 | |
| .rs
 | |
| .sp
 | |
| When the alternative matching function has given the PCRE2_ERROR_PARTIAL
 | |
| return, indicating that the subject partially matched the pattern, you can
 | |
| restart the match with additional subject data by means of the
 | |
| \fBdfa_restart\fP modifier. For example:
 | |
| .sp
 | |
|     re> /^\ed?\ed(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\ed\ed$/
 | |
|   data> 23ja\e=P,dfa
 | |
|   Partial match: 23ja
 | |
|   data> n05\e=dfa,dfa_restart
 | |
|    0: n05
 | |
| .sp
 | |
| For further information about partial matching, see the
 | |
| .\" HREF
 | |
| \fBpcre2partial\fP
 | |
| .\"
 | |
| documentation.
 | |
| .
 | |
| .
 | |
| .SH CALLOUTS
 | |
| .rs
 | |
| .sp
 | |
| If the pattern contains any callout requests, \fBpcre2test\fP's callout
 | |
| function is called during matching unless \fBcallout_none\fP is specified.
 | |
| This works with both matching functions.
 | |
| .P
 | |
| The callout function in \fBpcre2test\fP returns zero (carry on matching) by
 | |
| default, but you can use a \fBcallout_fail\fP modifier in a subject line (as
 | |
| described above) to change this and other parameters of the callout.
 | |
| .P
 | |
| Inserting callouts can be helpful when using \fBpcre2test\fP to check
 | |
| complicated regular expressions. For further information about callouts, see
 | |
| the
 | |
| .\" HREF
 | |
| \fBpcre2callout\fP
 | |
| .\"
 | |
| documentation.
 | |
| .P
 | |
| The output for callouts with numerical arguments and those with string
 | |
| arguments is slightly different.
 | |
| .
 | |
| .
 | |
| .SS "Callouts with numerical arguments"
 | |
| .rs
 | |
| .sp
 | |
| By default, the callout function displays the callout number, the start and
 | |
| current positions in the subject text at the callout time, and the next pattern
 | |
| item to be tested. For example:
 | |
| .sp
 | |
|   --->pqrabcdef
 | |
|     0    ^  ^     \ed
 | |
| .sp
 | |
| This output indicates that callout number 0 occurred for a match attempt
 | |
| starting at the fourth character of the subject string, when the pointer was at
 | |
| the seventh character, and when the next pattern item was \ed. Just
 | |
| one circumflex is output if the start and current positions are the same.
 | |
| .P
 | |
| Callouts numbered 255 are assumed to be automatic callouts, inserted as a
 | |
| result of the \fB/auto_callout\fP pattern modifier. In this case, instead of
 | |
| showing the callout number, the offset in the pattern, preceded by a plus, is
 | |
| output. For example:
 | |
| .sp
 | |
|     re> /\ed?[A-E]\e*/auto_callout
 | |
|   data> E*
 | |
|   --->E*
 | |
|    +0 ^      \ed?
 | |
|    +3 ^      [A-E]
 | |
|    +8 ^^     \e*
 | |
|   +10 ^ ^
 | |
|    0: E*
 | |
| .sp
 | |
| If a pattern contains (*MARK) items, an additional line is output whenever
 | |
| a change of latest mark is passed to the callout function. For example:
 | |
| .sp
 | |
|     re> /a(*MARK:X)bc/auto_callout
 | |
|   data> abc
 | |
|   --->abc
 | |
|    +0 ^       a
 | |
|    +1 ^^      (*MARK:X)
 | |
|   +10 ^^      b
 | |
|   Latest Mark: X
 | |
|   +11 ^ ^     c
 | |
|   +12 ^  ^
 | |
|    0: abc
 | |
| .sp
 | |
| The mark changes between matching "a" and "b", but stays the same for the rest
 | |
| of the match, so nothing more is output. If, as a result of backtracking, the
 | |
| mark reverts to being unset, the text "<unset>" is output.
 | |
| .
 | |
| .
 | |
| .SS "Callouts with string arguments"
 | |
| .rs
 | |
| .sp
 | |
| The output for a callout with a string argument is similar, except that instead
 | |
| of outputting a callout number before the position indicators, the callout
 | |
| string and its offset in the pattern string are output before the reflection of
 | |
| the subject string, and the subject string is reflected for each callout. For
 | |
| example:
 | |
| .sp
 | |
|     re> /^ab(?C'first')cd(?C"second")ef/
 | |
|   data> abcdefg
 | |
|   Callout (7): 'first'
 | |
|   --->abcdefg
 | |
|       ^ ^         c
 | |
|   Callout (20): "second"
 | |
|   --->abcdefg
 | |
|       ^   ^       e
 | |
|    0: abcdef
 | |
| .sp
 | |
| .
 | |
| .
 | |
| .
 | |
| .SH "NON-PRINTING CHARACTERS"
 | |
| .rs
 | |
| .sp
 | |
| When \fBpcre2test\fP is outputting text in the compiled version of a pattern,
 | |
| bytes other than 32-126 are always treated as non-printing characters and are
 | |
| therefore shown as hex escapes.
 | |
| .P
 | |
| When \fBpcre2test\fP is outputting text that is a matched part of a subject
 | |
| string, it behaves in the same way, unless a different locale has been set for
 | |
| the pattern (using the \fB/locale\fP modifier). In this case, the
 | |
| \fBisprint()\fP function is used to distinguish printing and non-printing
 | |
| characters.
 | |
| .
 | |
| .
 | |
| .
 | |
| .\" HTML <a name="saverestore"></a>
 | |
| .SH "SAVING AND RESTORING COMPILED PATTERNS"
 | |
| .rs
 | |
| .sp
 | |
| It is possible to save compiled patterns on disc or elsewhere, and reload them
 | |
| later, subject to a number of restrictions. JIT data cannot be saved. The host
 | |
| on which the patterns are reloaded must be running the same version of PCRE2,
 | |
| with the same code unit width, and must also have the same endianness, pointer
 | |
| width and PCRE2_SIZE type. Before compiled patterns can be saved they must be
 | |
| serialized, that is, converted to a stream of bytes. A single byte stream may
 | |
| contain any number of compiled patterns, but they must all use the same
 | |
| character tables. A single copy of the tables is included in the byte stream
 | |
| (its size is 1088 bytes).
 | |
| .P
 | |
| The functions whose names begin with \fBpcre2_serialize_\fP are used
 | |
| for serializing and de-serializing. They are described in the
 | |
| .\" HREF
 | |
| \fBpcre2serialize\fP
 | |
| .\"
 | |
| documentation. In this section we describe the features of \fBpcre2test\fP that
 | |
| can be used to test these functions.
 | |
| .P
 | |
| When a pattern with \fBpush\fP modifier is successfully compiled, it is pushed
 | |
| onto a stack of compiled patterns, and \fBpcre2test\fP expects the next line to
 | |
| contain a new pattern (or command) instead of a subject line. By this means, a
 | |
| number of patterns can be compiled and retained. The \fBpush\fP modifier is
 | |
| incompatible with \fBposix\fP, and control modifiers that act at match time are
 | |
| ignored (with a message). The \fBjitverify\fP modifier applies only at compile
 | |
| time. The command
 | |
| .sp
 | |
|   #save <filename>
 | |
| .sp
 | |
| causes all the stacked patterns to be serialized and the result written to the
 | |
| named file. Afterwards, all the stacked patterns are freed. The command
 | |
| .sp
 | |
|   #load <filename>
 | |
| .sp
 | |
| reads the data in the file, and then arranges for it to be de-serialized, with
 | |
| the resulting compiled patterns added to the pattern stack. The pattern on the
 | |
| top of the stack can be retrieved by the #pop command, which must be followed
 | |
| by lines of subjects that are to be matched with the pattern, terminated as
 | |
| usual by an empty line or end of file. This command may be followed by a
 | |
| modifier list containing only
 | |
| .\" HTML <a href="#controlmodifiers">
 | |
| .\" </a>
 | |
| control modifiers
 | |
| .\"
 | |
| that act after a pattern has been compiled. In particular, \fBhex\fP,
 | |
| \fBposix\fP, and \fBpush\fP are not allowed, nor are any
 | |
| .\" HTML <a href="#optionmodifiers">
 | |
| .\" </a>
 | |
| option-setting modifiers.
 | |
| .\"
 | |
| The JIT modifiers are, however permitted. Here is an example that saves and
 | |
| reloads two patterns.
 | |
| .sp
 | |
|   /abc/push
 | |
|   /xyz/push
 | |
|   #save tempfile
 | |
|   #load tempfile
 | |
|   #pop info
 | |
|   xyz
 | |
| .sp
 | |
|   #pop jit,bincode
 | |
|   abc
 | |
| .sp
 | |
| If \fBjitverify\fP is used with #pop, it does not automatically imply
 | |
| \fBjit\fP, which is different behaviour from when it is used on a pattern.
 | |
| .
 | |
| .
 | |
| .
 | |
| .SH "SEE ALSO"
 | |
| .rs
 | |
| .sp
 | |
| \fBpcre2\fP(3), \fBpcre2api\fP(3), \fBpcre2callout\fP(3),
 | |
| \fBpcre2jit\fP, \fBpcre2matching\fP(3), \fBpcre2partial\fP(d),
 | |
| \fBpcre2pattern\fP(3), \fBpcre2serialize\fP(3).
 | |
| .
 | |
| .
 | |
| .SH AUTHOR
 | |
| .rs
 | |
| .sp
 | |
| .nf
 | |
| Philip Hazel
 | |
| University Computing Service
 | |
| Cambridge, England.
 | |
| .fi
 | |
| .
 | |
| .
 | |
| .SH REVISION
 | |
| .rs
 | |
| .sp
 | |
| .nf
 | |
| Last updated: 20 May 2015
 | |
| Copyright (c) 1997-2015 University of Cambridge.
 | |
| .fi
 | 
