You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
7.0 KiB
200 lines
7.0 KiB
5 years ago
|
'\" t
|
||
|
.\" Title: zrex
|
||
|
.\" Author: [see the "AUTHORS" section]
|
||
|
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
|
||
|
.\" Date: 12/31/2016
|
||
|
.\" Manual: CZMQ Manual
|
||
|
.\" Source: CZMQ 4.0.2
|
||
|
.\" Language: English
|
||
|
.\"
|
||
|
.TH "ZREX" "3" "12/31/2016" "CZMQ 4\&.0\&.2" "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 \- 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);
|
||
|
.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
|