'\" t .\" Title: zrex .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 03/02/2024 .\" Manual: CZMQ Manual .\" Source: CZMQ 4.2.1 .\" Language: English .\" .TH "ZREX" "3" "03/02/2024" "CZMQ 4\&.2\&.1" "CZMQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" zrex \- Class for work with regular expressions .SH "SYNOPSIS" .sp .nf // Constructor\&. Optionally, sets an expression against which we can match // text and capture hits\&. If there is an error in the expression, reports // zrex_valid() as false and provides the error in zrex_strerror()\&. If you // set a pattern, you can call zrex_matches() to test it against text\&. CZMQ_EXPORT zrex_t * zrex_new (const char *expression); // Destructor CZMQ_EXPORT void zrex_destroy (zrex_t **self_p); // Return true if the expression was valid and compiled without errors\&. CZMQ_EXPORT bool zrex_valid (zrex_t *self); // Return the error message generated during compilation of the expression\&. CZMQ_EXPORT const char * zrex_strerror (zrex_t *self); // Returns true if the text matches the previously compiled expression\&. // Use this method to compare one expression against many strings\&. CZMQ_EXPORT bool zrex_matches (zrex_t *self, const char *text); // Returns true if the text matches the supplied expression\&. Use this // method to compare one string against several expressions\&. CZMQ_EXPORT bool zrex_eq (zrex_t *self, const char *text, const char *expression); // Returns number of hits from last zrex_matches or zrex_eq\&. If the text // matched, returns 1 plus the number of capture groups\&. If the text did // not match, returns zero\&. To retrieve individual capture groups, call // zrex_hit ()\&. CZMQ_EXPORT int zrex_hits (zrex_t *self); // Returns the Nth capture group from the last expression match, where // N is 0 to the value returned by zrex_hits()\&. Capture group 0 is the // whole matching string\&. Sequence 1 is the first capture group, if any, // and so on\&. CZMQ_EXPORT const char * zrex_hit (zrex_t *self, uint index); // Fetches hits into string variables provided by caller; this makes for // nicer code than accessing hits by index\&. Caller should not modify nor // free the returned values\&. Returns number of strings returned\&. This // method starts at hit 1, i\&.e\&. first capture group, as hit 0 is always // the original matched string\&. CZMQ_EXPORT int zrex_fetch (zrex_t *self, const char **string_p, \&.\&.\&.); // Self test of this class CZMQ_EXPORT void zrex_test (bool verbose); Please add \*(Aq@interface\*(Aq section in \*(Aq\&./\&.\&./src/zrex\&.c\*(Aq\&. .fi .SH "DESCRIPTION" .sp Wraps a very simple regular expression library (SLRE) as a CZMQ class\&. Supports this syntax: .sp .if n \{\ .RS 4 .\} .nf ^ Match beginning of a buffer $ Match end of a buffer () Grouping and substring capturing [\&.\&.\&.] Match any character from set [^\&.\&.\&.] Match any character but ones from set \&. Match any character \es Match whitespace \eS Match non\-whitespace \ed Match decimal digit \eD Match non decimal digit \ea Match alphabetic character \eA Match non\-alphabetic character \ew Match alphanumeric character \eW Match non\-alphanumeric character \er Match carriage return \en Match newline + Match one or more times (greedy) +? Match one or more times (non\-greedy) * Match zero or more times (greedy) *? Match zero or more times (non\-greedy) ? Match zero or once \exDD Match byte with hex value 0xDD \emeta Match one of the meta character: ^$()\&.[*+?\e .fi .if n \{\ .RE .\} .sp Please add \fI@discuss\fR section in \fI\&./\&.\&./src/zrex\&.c\fR\&. .SH "EXAMPLE" .PP \fBFrom zrex_test method\fR. .sp .if n \{\ .RS 4 .\} .nf // This shows the pattern of matching many lines to a single pattern zrex_t *rex = zrex_new ("\e\ed+\-\e\ed+\-\e\ed+"); assert (rex); assert (zrex_valid (rex)); bool matches = zrex_matches (rex, "123\-456\-789"); assert (matches); assert (zrex_hits (rex) == 1); assert (streq (zrex_hit (rex, 0), "123\-456\-789")); assert (zrex_hit (rex, 1) == NULL); zrex_destroy (&rex); // Here we pick out hits using capture groups rex = zrex_new ("(\e\ed+)\-(\e\ed+)\-(\e\ed+)"); assert (rex); assert (zrex_valid (rex)); matches = zrex_matches (rex, "123\-456\-ABC"); assert (!matches); matches = zrex_matches (rex, "123\-456\-789"); assert (matches); assert (zrex_hits (rex) == 4); assert (streq (zrex_hit (rex, 0), "123\-456\-789")); assert (streq (zrex_hit (rex, 1), "123")); assert (streq (zrex_hit (rex, 2), "456")); assert (streq (zrex_hit (rex, 3), "789")); zrex_destroy (&rex); // This shows the pattern of matching one line against many // patterns and then handling the case when it hits rex = zrex_new (NULL); // No initial pattern assert (rex); char *input = "Mechanism: CURVE"; matches = zrex_eq (rex, input, "Version: (\&.+)"); assert (!matches); assert (zrex_hits (rex) == 0); matches = zrex_eq (rex, input, "Mechanism: (\&.+)"); assert (matches); assert (zrex_hits (rex) == 2); const char *mechanism; zrex_fetch (rex, &mechanism, NULL); assert (streq (zrex_hit (rex, 1), "CURVE")); assert (streq (mechanism, "CURVE")); zrex_destroy (&rex); #if defined (__WINDOWS__) zsys_shutdown(); #endif .fi .if n \{\ .RE .\} .sp .SH "AUTHORS" .sp The czmq manual was written by the authors in the AUTHORS file\&. .SH "RESOURCES" .sp Main web site: \m[blue]\fB\%\fR\m[] .sp Report bugs to the email <\m[blue]\fBzeromq\-dev@lists\&.zeromq\&.org\fR\m[]\&\s-2\u[1]\d\s+2> .SH "COPYRIGHT" .sp Copyright (c) the Contributors as noted in the AUTHORS file\&. This file is part of CZMQ, the high\-level C binding for 0MQ: http://czmq\&.zeromq\&.org\&. This Source Code Form is subject to the terms of the Mozilla Public License, v\&. 2\&.0\&. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla\&.org/MPL/2\&.0/\&. LICENSE included with the czmq distribution\&. .SH "NOTES" .IP " 1." 4 zeromq-dev@lists.zeromq.org .RS 4 \%mailto:zeromq-dev@lists.zeromq.org .RE