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",则否定的先行断言
通过使用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 |