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
							 |