Add ability to specify case insensitive matching.

This commit is contained in:
Rene Gollent
2013-06-05 22:02:43 -04:00
parent 47fedeb598
commit 7d4a7ce33e
2 changed files with 22 additions and 12 deletions
+4 -2
View File
@@ -22,7 +22,8 @@ public:
RegExp();
RegExp(const char* pattern,
PatternType patternType
= PATTERN_TYPE_REGULAR_EXPRESSION);
= PATTERN_TYPE_REGULAR_EXPRESSION,
bool caseSensitive = true);
RegExp(const RegExp& other);
~RegExp();
@@ -31,7 +32,8 @@ public:
bool SetPattern(const char* pattern,
PatternType patternType
= PATTERN_TYPE_REGULAR_EXPRESSION);
= PATTERN_TYPE_REGULAR_EXPRESSION,
bool caseSensitive = true);
MatchResult Match(const char* string) const;
+18 -10
View File
@@ -20,7 +20,7 @@
struct RegExp::Data : public BReferenceable {
Data(const char* pattern, PatternType patternType)
Data(const char* pattern, PatternType patternType, bool caseSensitive)
:
BReferenceable()
{
@@ -115,7 +115,11 @@ struct RegExp::Data : public BReferenceable {
pattern = patternString.String();
}
fError = regcomp(&fCompiledExpression, pattern, REG_EXTENDED);
int flags = REG_EXTENDED;
if (!caseSensitive)
flags |= REG_ICASE;
fError = regcomp(&fCompiledExpression, pattern, flags);
}
~Data()
@@ -218,11 +222,12 @@ RegExp::RegExp()
}
RegExp::RegExp(const char* pattern, PatternType patternType)
RegExp::RegExp(const char* pattern, PatternType patternType,
bool caseSensitive)
:
fData(NULL)
{
SetPattern(pattern, patternType);
SetPattern(pattern, patternType, caseSensitive);
}
@@ -243,20 +248,23 @@ RegExp::~RegExp()
bool
RegExp::SetPattern(const char* pattern, PatternType patternType)
RegExp::SetPattern(const char* pattern, PatternType patternType,
bool caseSensitive)
{
if (fData != NULL) {
fData->ReleaseReference();
fData = NULL;
}
fData = new Data(pattern, patternType);
if (!fData->IsValid()) {
delete fData;
fData = NULL;
Data* newData = new(std::nothrow) Data(pattern, patternType, caseSensitive);
if (newData == NULL)
return false;
}
BReference<Data> dataReference(newData, true);
if (!newData->IsValid())
return false;
fData = dataReference.Detach();
return true;
}