我需要根据两个要求过滤字符串
1)他们必须以“city_date”开头
2)他们不应该在字符串中的任何地方使用“metro”。
这需要在一次检查中完成。
首先我知道它应该是这样但不知道用“地铁”消除字符串的锄头
string pattern = "city_date_"
已添加:我需要将正则表达式用于SQL LIKE语句。因此我需要它在一个字符串中。
答案 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