关于c ++:正则表达式来过滤字符串

Regex to filter strings

我需要根据两个要求筛选字符串

1)必须以"城市日期"开头。

2)它们不应该在字符串中的任何位置有"Metro"。

这需要在一次检查中完成。

首先,我知道应该这样,但不知道如何消除与"地铁"的关系。

1
string pattern ="city_date_"

添加:我需要对类似SQL的语句使用regex。所以我需要一根绳子。


正则表达式通常比直接比较昂贵得多。如果直接比较可以很容易地表达需求,那么就使用它们。这个问题不需要正则表达式的开销。只需编写代码:

1
2
3
4
5
6
std::string str = /* whatever */
const std::string head ="city_date";
const std::string exclude ="metro";
if (str.compare(head, 0, head.size) == 0 && str.find(exclude) == std::string::npos) {
    // process valid string
}

使用否定的先行断言(我不知道您的regex lib是否支持这种断言)

1
string pattern ="^city_date(?!.*metro)"

我还在开头添加了一个锚^,它将匹配字符串的开头。

如果前面有一个字符串"metro",则否定的先行断言(?!.*metro)将失败。


通过使用javascript

1
2
3
4
5
6
7
8
9
10
11
input="contains the string your matching"

var pattern=/^city_date/g;
if(pattern.test(input))  // to match city_data at the begining
{
var patt=/metro/g;
if(patt.test(input)) return"false";  
else return input; //matched string without metro
}
else
return"false"; //unable to match city_data