libzypp
11.13.5
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
Regex.cc
Go to the documentation of this file.
1
/*---------------------------------------------------------------------\
2
| ____ _ __ __ ___ |
3
| |__ / \ / / . \ . \ |
4
| / / \ V /| _/ _/ |
5
| / /__ | | | | | | |
6
| /_____||_| |_| |_| |
7
| |
8
\---------------------------------------------------------------------*/
12
#include <cstdio>
13
#include <cstdarg>
14
15
#include <iostream>
16
17
#include "
zypp/base/Regex.h
"
18
19
using namespace
zypp;
20
using namespace
zypp::str;
21
22
regex::regex()
23
: m_flags(match_extended)
24
, m_valid(false)
25
{
26
27
}
28
29
void
regex::assign
(
const
std::string& str,
int
flags)
30
{
31
m_valid
=
true
;
32
m_str
= str;
33
m_flags
= flags;
34
int
err;
35
char
errbuff[100];
36
if
(!(flags &
normal
)) {
37
flags |=
match_extended
;
38
flags &= ~(
normal
);
39
}
40
41
if
((err = regcomp(&
m_preg
, str.c_str(), flags))) {
42
m_valid
=
false
;
43
regerror(err, &
m_preg
, errbuff,
sizeof
(errbuff));
44
ZYPP_THROW
(
regex_error
(std::string(errbuff)));
45
}
46
}
47
48
regex::regex
(
const
std::string& str,
int
flags)
49
{
50
assign
(str, flags);
51
}
52
53
regex::~regex
() throw()
54
{
55
if
(
m_valid
)
56
regfree(&
m_preg
);
57
}
58
59
bool
zypp::str::regex_match
(
const
char
* s,
smatch
& matches,
const
regex
&
regex
)
60
{
61
bool
r = s && regex.
m_valid
&& !regexec(®ex.
m_preg
, s, 12, &matches.
pmatch
[0], 0);
62
if
(r)
63
matches.
match_str
= s;
64
return
r;
65
}
66
67
bool
zypp::str::regex_match
(
const
char
* s,
const
regex& regex)
68
{
69
return
s && !regexec(®ex.
m_preg
, s, 0, NULL, 0);
70
}
71
72
smatch::smatch
()
73
{
74
memset(&
pmatch
, -1,
sizeof
(
pmatch
));
75
}
76
77
std::string
smatch::operator[]
(
unsigned
i)
const
78
{
79
if
( i <
sizeof
(
pmatch
)/
sizeof
(*
pmatch
) &&
pmatch
[i].rm_so != -1 )
80
return
match_str
.substr(
pmatch
[i].rm_so,
pmatch
[i].rm_eo-
pmatch
[i].rm_so );
81
82
return
std::string();
83
}
84
85
86
unsigned
smatch::size
()
const
87
{
88
unsigned
matches = unsigned(-1);
89
// Get highest (pmatch[i].rm_so != -1). Just looking for the 1st
90
// (pmatch[i].rm_so == -1) is wrong as optional mayches "()?"
91
// may be embeded.
92
for
(
unsigned
i = 0; i <
sizeof
(
pmatch
)/
sizeof
(*
pmatch
); ++i )
93
{
94
if
(
pmatch
[i].rm_so != -1 )
95
matches = i;
96
}
97
return
++matches;
98
}
zypp
base
Regex.cc
Generated by
1.8.1