正则表达式过滤字符串

时间:2012-10-23 10:31:39

标签: c++ regex string pattern-matching

我需要根据两个要求过滤字符串

1)他们必须以“city_date”开头

2)他们不应该在字符串中的任何地方使用“metro”。

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

首先我知道它应该是这样但不知道用“地铁”消除字符串的锄头

string pattern = "city_date_"

已添加:我需要将正则表达式用于SQL LIKE语句。因此我需要它在一个字符串中。

3 个答案:

答案 0 :(得分:3)

使用negative lookahead assertion(我不知道您的正则表达式lib是否支持此功能)

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

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

如果前面某处有字符串“metro”,则负前瞻断言(?!.*metro)将失败。

答案 1 :(得分:3)

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

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
}

答案 2 :(得分:0)

使用javascript

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