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
			| 
											6 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
 |