1

2 つの要件に基づいて文字列をフィルタリングする必要があります

1) 「city_date」で始まる必要があります

2) 文字列のどこにも「metro」を含めないでください。

これは、1 回のチェックで行う必要があります。

開始するには、このようにする必要があることは知っていますが、「メトロ」で文字列を削除する方法を知りません

string pattern = "city_date_"

追加: SQL LIKE ステートメントに正規表現を使用する必要があります。したがって、文字列で必要です。

4

3 に答える 3

4

否定先読みアサーションを使用します (これが正規表現ライブラリでサポートされているかどうかはわかりません)

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

^また、文字列の先頭に一致するアンカーを先頭に追加しました。

(?!.*metro)文字列「metro」がどこかにある場合、否定先読みアサーションは失敗します。

于 2012-10-23T10:37:18.027 に答える
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
}
于 2012-10-23T10:45:28.327 に答える
0

ジャバスクリプトを使用して

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
于 2012-10-23T13:25:32.680 に答える