0.9.8.10
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Regex.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2007-2015 Hypertable, Inc.
3  *
4  * This file is part of Hypertable.
5  *
6  * Hypertable is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 3
9  * of the License, or any later version.
10  *
11  * Hypertable is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301, USA.
20  */
21 
26 
27 #include <Common/Compat.h>
28 #include "Regex.h"
29 
30 using namespace Hypertable;
31 
32 bool
33 Regex::extract_prefix(const char *regex, size_t regex_len,
34  const char **output, size_t *output_len,
35  DynamicBuffer &buf) {
36  const char *ptr;
37  if (regex_len == 0 || *regex != '^')
38  return false;
39  *output = regex+1;
40  for (ptr=*output; ptr<regex+regex_len; ptr++) {
41  if (*ptr == '.' || *ptr == '[' || *ptr == '(' || *ptr == '{' || *ptr == '\\' || *ptr == '+' || *ptr == '$') {
42  *output_len = ptr - *output;
43  return *output_len > 0;
44  }
45  else if (*ptr == '*' || *ptr == '?' || *ptr == '|') {
46  if ((ptr - *output) == 0)
47  return false;
48  *output_len = (ptr - *output) - 1;
49  return *output_len > 0;
50  }
51  }
52  *output_len = ptr - *output;
53  return *output_len > 0;
54 }
A dynamic, resizable and reference counted memory buffer.
Definition: DynamicBuffer.h:42
Compatibility Macros for C/C++.
Declarations for Regex.
Hypertable definitions
static bool extract_prefix(const char *regex, size_t regex_len, const char **output, size_t *output_len, DynamicBuffer &buf)
Extracts a fixed prefix from regular expression.
Definition: Regex.cc:33