346 |
#define PCRE_IS_SET(o) \ |
#define PCRE_IS_SET(o) \ |
347 |
(all_options_ & o) == o |
(all_options_ & o) == o |
348 |
|
|
|
// We convert user-passed pointers into special Arg objects |
|
|
PCRECPP_EXP_DECL Arg no_arg; |
|
|
|
|
349 |
/***** Compiling regular expressions: the RE class *****/ |
/***** Compiling regular expressions: the RE class *****/ |
350 |
|
|
351 |
// RE_Options allow you to set options to be passed along to pcre, |
// RE_Options allow you to set options to be passed along to pcre, |
352 |
// along with other options we put on top of pcre. |
// along with other options we put on top of pcre. |
353 |
// Only 9 modifiers, plus match_limit and match_limit_recursion, |
// Only 9 modifiers, plus match_limit and match_limit_recursion, |
354 |
// are supported now. |
// are supported now. |
355 |
class PCRECPP_EXP_DECL RE_Options { |
class PCRECPP_EXP_DEFN RE_Options { |
356 |
public: |
public: |
357 |
// constructor |
// constructor |
358 |
RE_Options() : match_limit_(0), match_limit_recursion_(0), all_options_(0) {} |
RE_Options() : match_limit_(0), match_limit_recursion_(0), all_options_(0) {} |
400 |
return PCRE_IS_SET(PCRE_DOTALL); |
return PCRE_IS_SET(PCRE_DOTALL); |
401 |
} |
} |
402 |
RE_Options &set_dotall(bool x) { |
RE_Options &set_dotall(bool x) { |
403 |
PCRE_SET_OR_CLEAR(x,PCRE_DOTALL); |
PCRE_SET_OR_CLEAR(x, PCRE_DOTALL); |
404 |
} |
} |
405 |
|
|
406 |
bool extended() const { |
bool extended() const { |
407 |
return PCRE_IS_SET(PCRE_EXTENDED); |
return PCRE_IS_SET(PCRE_EXTENDED); |
408 |
} |
} |
409 |
RE_Options &set_extended(bool x) { |
RE_Options &set_extended(bool x) { |
410 |
PCRE_SET_OR_CLEAR(x,PCRE_EXTENDED); |
PCRE_SET_OR_CLEAR(x, PCRE_EXTENDED); |
411 |
} |
} |
412 |
|
|
413 |
bool dollar_endonly() const { |
bool dollar_endonly() const { |
414 |
return PCRE_IS_SET(PCRE_DOLLAR_ENDONLY); |
return PCRE_IS_SET(PCRE_DOLLAR_ENDONLY); |
415 |
} |
} |
416 |
RE_Options &set_dollar_endonly(bool x) { |
RE_Options &set_dollar_endonly(bool x) { |
417 |
PCRE_SET_OR_CLEAR(x,PCRE_DOLLAR_ENDONLY); |
PCRE_SET_OR_CLEAR(x, PCRE_DOLLAR_ENDONLY); |
418 |
} |
} |
419 |
|
|
420 |
bool extra() const { |
bool extra() const { |
421 |
return PCRE_IS_SET( PCRE_EXTRA); |
return PCRE_IS_SET(PCRE_EXTRA); |
422 |
} |
} |
423 |
RE_Options &set_extra(bool x) { |
RE_Options &set_extra(bool x) { |
424 |
PCRE_SET_OR_CLEAR(x, PCRE_EXTRA); |
PCRE_SET_OR_CLEAR(x, PCRE_EXTRA); |
484 |
// Interface for regular expression matching. Also corresponds to a |
// Interface for regular expression matching. Also corresponds to a |
485 |
// pre-compiled regular expression. An "RE" object is safe for |
// pre-compiled regular expression. An "RE" object is safe for |
486 |
// concurrent use by multiple threads. |
// concurrent use by multiple threads. |
487 |
class PCRECPP_EXP_DECL RE { |
class PCRECPP_EXP_DEFN RE { |
488 |
public: |
public: |
489 |
// We provide implicit conversions from strings so that users can |
// We provide implicit conversions from strings so that users can |
490 |
// pass in a string or a "const char*" wherever an "RE" is expected. |
// pass in a string or a "const char*" wherever an "RE" is expected. |
|
RE(const char* pat) { Init(pat, NULL); } |
|
|
RE(const char *pat, const RE_Options& option) { Init(pat, &option); } |
|
491 |
RE(const string& pat) { Init(pat, NULL); } |
RE(const string& pat) { Init(pat, NULL); } |
492 |
RE(const string& pat, const RE_Options& option) { Init(pat, &option); } |
RE(const string& pat, const RE_Options& option) { Init(pat, &option); } |
493 |
|
RE(const char* pat) { Init(pat, NULL); } |
494 |
|
RE(const char* pat, const RE_Options& option) { Init(pat, &option); } |
495 |
|
RE(const unsigned char* pat) { |
496 |
|
Init(reinterpret_cast<const char*>(pat), NULL); |
497 |
|
} |
498 |
|
RE(const unsigned char* pat, const RE_Options& option) { |
499 |
|
Init(reinterpret_cast<const char*>(pat), &option); |
500 |
|
} |
501 |
|
|
502 |
// Copy constructor & assignment - note that these are expensive |
// Copy constructor & assignment - note that these are expensive |
503 |
// because they recompile the expression. |
// because they recompile the expression. |
620 |
// 1.5-2.0? |
// 1.5-2.0? |
621 |
// may become: |
// may become: |
622 |
// 1\.5\-2\.0\? |
// 1\.5\-2\.0\? |
623 |
|
// Note QuoteMeta behaves the same as perl's QuoteMeta function, |
624 |
|
// *except* that it escapes the NUL character (\0) as backslash + 0, |
625 |
|
// rather than backslash + NUL. |
626 |
static string QuoteMeta(const StringPiece& unquoted); |
static string QuoteMeta(const StringPiece& unquoted); |
627 |
|
|
628 |
|
|
646 |
// regexp wasn't valid on construction. |
// regexp wasn't valid on construction. |
647 |
int NumberOfCapturingGroups() const; |
int NumberOfCapturingGroups() const; |
648 |
|
|
649 |
|
// The default value for an argument, to indicate the end of the argument |
650 |
|
// list. This must be used only in optional argument defaults. It should NOT |
651 |
|
// be passed explicitly. Some people have tried to use it like this: |
652 |
|
// |
653 |
|
// FullMatch(x, y, &z, no_arg, &w); |
654 |
|
// |
655 |
|
// This is a mistake, and will not work. |
656 |
|
static Arg no_arg; |
657 |
|
|
658 |
private: |
private: |
659 |
|
|
660 |
void Init(const string& pattern, const RE_Options* options); |
void Init(const string& pattern, const RE_Options* options); |