8 #ifndef BOOSTER_REGEX_MATCH_H
9 #define BOOSTER_REGEX_MATCH_H
24 template<
typename Iterator>
25 class sub_match :
public std::pair<Iterator,Iterator> {
27 typedef Iterator iterator;
28 typedef typename std::iterator_traits<Iterator>::value_type value_type;
29 typedef typename std::iterator_traits<Iterator>::difference_type difference_type;
35 typedef std::pair<Iterator,Iterator> pair_type;
49 return std::distance(pair_type::first,pair_type::second);
67 return string_type(pair_type::first,pair_type::second);
77 return str().compare(other.
str());
84 return str().compare(other);
91 return str().compare(s);
101 typedef sub_match<char const *> csub_match;
102 typedef sub_match<std::string::const_iterator> ssub_match;
109 template<
typename Iterator>
131 if(n < 0 || n >=
int(offsets_.size()))
133 if(offsets_[n].first == -1)
138 std::advance(r.first,offsets_[n].first);
139 std::advance(r.second,offsets_[n].second);
148 return offsets_.size();
161 std::advance(r.first,offsets_.back().second);
162 r.
matched = r.first != r.second;
172 if(offsets_.empty() || offsets_[0].first == 0)
177 std::advance(r.second,offsets_[0].first);
183 void assign(Iterator begin,Iterator end,std::vector<std::pair<int,int> > &offsets)
187 offsets_.swap(offsets);
193 Iterator begin_,end_;
194 std::vector<std::pair<int,int> > offsets_;
197 typedef match_results<char const *> cmatch;
198 typedef match_results<std::string::const_iterator> smatch;
204 template<
typename Regex>
207 std::vector<std::pair<int,int> > map;
208 bool res = r.match(begin,end,map,flags);
209 if(!res)
return false;
210 m.assign(begin,end,map);
218 template<
typename Regex>
221 std::vector<std::pair<int,int> > map;
222 bool res = r.match(s.c_str(),s.c_str()+s.size(),map,flags);
223 if(!res)
return false;
224 m.assign(s.begin(),s.end(),map);
232 template<
typename Regex>
235 std::vector<std::pair<int,int> > map;
237 char const *end = begin+strlen(begin);
238 bool res = r.match(begin,end,map,flags);
239 if(!res)
return false;
240 m.assign(begin,end,map);
248 template<
typename Regex>
251 std::vector<std::pair<int,int> > map;
252 bool res = r.search(begin,end,map,flags);
253 if(!res)
return false;
254 m.assign(begin,end,map);
262 template<
typename Regex>
265 std::vector<std::pair<int,int> > map;
266 bool res = r.search(s.c_str(),s.c_str()+s.size(),map,flags);
267 if(!res)
return false;
268 m.assign(s.begin(),s.end(),map);
277 template<
typename Regex>
280 std::vector<std::pair<int,int> > map;
282 char const *end = begin+strlen(begin);
283 bool res = r.search(begin,end,map,flags);
284 if(!res)
return false;
285 m.assign(begin,end,map);
292 template<
typename Regex>
293 bool regex_match(
char const *begin,
char const *end, Regex
const &r,
int flags = 0)
295 return r.match(begin,end,flags);
301 template<
typename Regex>
302 bool regex_match(std::string
const &s, Regex
const &r,
int flags = 0)
304 return r.match(s.c_str(),s.c_str()+s.size(),flags);
310 template<
typename Regex>
313 return r.match(s,s+strlen(s),flags);
319 template<
typename Regex>
320 bool regex_search(
char const *begin,
char const *end, Regex
const &r,
int flags = 0)
322 return r.search(begin,end,flags);
328 template<
typename Regex>
331 return r.search(s.c_str(),s.c_str()+s.size(),flags);
337 template<
typename Regex>
340 return r.search(s,s+strlen(s),flags);
345 template<
typename Iterator>
346 bool operator==(sub_match<Iterator>
const &l,sub_match<Iterator>
const &r) {
return l.compare(r) == 0; }
347 template<
typename Iterator>
348 bool operator!=(sub_match<Iterator>
const &l,sub_match<Iterator>
const &r) {
return l.compare(r) != 0; }
349 template<
typename Iterator>
350 bool operator< (sub_match<Iterator>
const &l,sub_match<Iterator>
const &r) {
return l.compare(r) < 0; }
351 template<
typename Iterator>
352 bool operator> (sub_match<Iterator>
const &l,sub_match<Iterator>
const &r) {
return l.compare(r) > 0; }
353 template<
typename Iterator>
354 bool operator<=(sub_match<Iterator>
const &l,sub_match<Iterator>
const &r) {
return l.compare(r) <= 0; }
355 template<
typename Iterator>
356 bool operator>=(sub_match<Iterator>
const &l,sub_match<Iterator>
const &r) {
return l.compare(r) >= 0; }
359 template<
typename Iterator>
361 typename sub_match<Iterator>::string_type
const &l,
362 sub_match<Iterator>
const &r)
363 {
return l.compare(r) == 0; }
364 template<
typename Iterator>
366 typename sub_match<Iterator>::string_type
const &l,
367 sub_match<Iterator>
const &r)
368 {
return l.compare(r) != 0; }
370 template<
typename Iterator>
372 typename sub_match<Iterator>::string_type
const &l,
373 sub_match<Iterator>
const &r)
374 {
return l.compare(r) <= 0; }
375 template<
typename Iterator>
377 typename sub_match<Iterator>::string_type
const &l,
378 sub_match<Iterator>
const &r)
379 {
return l.compare(r) >= 0; }
381 template<
typename Iterator>
383 typename sub_match<Iterator>::string_type
const &l,
384 sub_match<Iterator>
const &r)
385 {
return l.compare(r) <0; }
386 template<
typename Iterator>
388 typename sub_match<Iterator>::string_type
const &l,
389 sub_match<Iterator>
const &r)
390 {
return l.compare(r) > 0; }
394 template<
typename Iterator>
396 sub_match<Iterator>
const &l,
397 typename sub_match<Iterator>::string_type
const &r
399 {
return l.compare(r) == 0; }
400 template<
typename Iterator>
402 sub_match<Iterator>
const &l,
403 typename sub_match<Iterator>::string_type
const &r
405 {
return l.compare(r) != 0; }
407 template<
typename Iterator>
409 sub_match<Iterator>
const &l,
410 typename sub_match<Iterator>::string_type
const &r
412 {
return l.compare(r) <= 0; }
414 template<
typename Iterator>
416 sub_match<Iterator>
const &l,
417 typename sub_match<Iterator>::string_type
const &r
419 {
return l.compare(r) >= 0; }
421 template<
typename Iterator>
423 sub_match<Iterator>
const &l,
424 typename sub_match<Iterator>::string_type
const &r
426 {
return l.compare(r) <0; }
428 template<
typename Iterator>
430 sub_match<Iterator>
const &l,
431 typename sub_match<Iterator>::string_type
const &r
433 {
return l.compare(r) > 0; }
436 template<
typename Iterator>
438 typename std::iterator_traits<Iterator>::value_type
const *l,
439 sub_match<Iterator>
const &r)
440 {
return r.compare(l) ==0; }
441 template<
typename Iterator>
443 typename std::iterator_traits<Iterator>::value_type
const *l,
444 sub_match<Iterator>
const &r)
445 {
return r.compare(l) !=0; }
448 template<
typename Iterator>
450 typename std::iterator_traits<Iterator>::value_type
const *l,
451 sub_match<Iterator>
const &r)
452 {
return r.compare(l) > 0; }
453 template<
typename Iterator>
455 typename std::iterator_traits<Iterator>::value_type
const *l,
456 sub_match<Iterator>
const &r)
457 {
return r.compare(l) < 0; }
459 template<
typename Iterator>
461 typename std::iterator_traits<Iterator>::value_type
const *l,
462 sub_match<Iterator>
const &r)
463 {
return r.compare(l) >=0; }
464 template<
typename Iterator>
466 typename std::iterator_traits<Iterator>::value_type
const *l,
467 sub_match<Iterator>
const &r)
468 {
return r.compare(l) <= 0; }
473 template<
typename Iterator>
475 sub_match<Iterator>
const &l,
476 typename std::iterator_traits<Iterator>::value_type
const *r
478 {
return l.compare(r) == 0; }
479 template<
typename Iterator>
481 sub_match<Iterator>
const &l,
482 typename std::iterator_traits<Iterator>::value_type
const *r
484 {
return l.compare(r) != 0; }
486 template<
typename Iterator>
488 sub_match<Iterator>
const &l,
489 typename std::iterator_traits<Iterator>::value_type
const *r
491 {
return l.compare(r) <= 0; }
493 template<
typename Iterator>
495 sub_match<Iterator>
const &l,
496 typename std::iterator_traits<Iterator>::value_type
const *r
498 {
return l.compare(r) >= 0; }
500 template<
typename Iterator>
502 sub_match<Iterator>
const &l,
503 typename std::iterator_traits<Iterator>::value_type
const *r
505 {
return l.compare(r) <0; }
507 template<
typename Iterator>
509 sub_match<Iterator>
const &l,
510 typename std::iterator_traits<Iterator>::value_type
const *r
512 {
return l.compare(r) > 0; }
516 template<
typename Iterator>
517 typename sub_match<Iterator>::string_type
518 operator+(sub_match<Iterator>
const &l,sub_match<Iterator>
const &r)
519 {
return l.str() + r.str(); }
521 template<
typename Iterator>
522 typename sub_match<Iterator>::string_type
523 operator+(sub_match<Iterator>
const &l,
typename sub_match<Iterator>::string_type
const &r)
524 {
return l.str() + r; }
526 template<
typename Iterator>
527 typename sub_match<Iterator>::string_type
528 operator+(
typename sub_match<Iterator>::string_type
const &l,sub_match<Iterator>
const &r)
529 {
return l + r.str(); }
531 template<
typename Iterator>
532 typename sub_match<Iterator>::string_type
533 operator+(sub_match<Iterator>
const &l,
typename sub_match<Iterator>::value_type
const *r)
534 {
return l.str() + r; }
536 template<
typename Iterator>
537 typename sub_match<Iterator>::string_type
538 operator+(
typename sub_match<Iterator>::value_type
const *l,sub_match<Iterator>
const &r)
539 {
return l + r.str(); }
sub_match()
Definition: regex_match.h:96
bool operator<=(string_key const &l, char const *r)
Definition: string_key.h:367
The object that hold the result of matching a regular expression against the text using regex_match a...
Definition: regex_match.h:110
value_type prefix()
Definition: regex_match.h:169
bool regex_search(char const *begin, char const *end, cmatch &m, Regex const &r, int flags=0)
Definition: regex_match.h:249
value_type operator[](int n) const
Definition: regex_match.h:128
int compare(string_type const &other) const
Definition: regex_match.h:82
match_results()
Definition: regex_match.h:115
bool matched
Definition: regex_match.h:41
std::basic_string< value_type > string_type
Definition: regex_match.h:34
bool regex_match(char const *begin, char const *end, cmatch &m, Regex const &r, int flags=0)
Definition: regex_match.h:205
sub_match< Iterator > value_type
Definition: regex_match.h:123
This class represents a single captures subexpression.
Definition: regex_match.h:25
bool operator<(string_key const &l, char const *r)
Definition: string_key.h:431
int compare(sub_match const &other) const
Definition: regex_match.h:75
bool operator>=(string_key const &l, char const *r)
Definition: string_key.h:398
int compare(value_type const *s) const
Definition: regex_match.h:89
size_t size() const
Definition: regex_match.h:146
difference_type length() const
Definition: regex_match.h:46
bool operator>(string_key const &l, char const *r)
Definition: string_key.h:462
value_type suffix()
Definition: regex_match.h:154
string_type str() const
Definition: regex_match.h:64