2010-12-28 31 views
1

CAtlRegExpを使用して検証を行うコードがあります。特定のケースでは、郵便番号(5または5-4形式)。さらに、データが正確になるように、アンカー(^と$)を使用しています。アンカーレス式を使用すると、Match呼び出しは成功します。アンカーを追加すると、まったく同じデータでMatch呼び出しが失敗します。CAtlRegExp式の問題(begin/endアンカー付き)

以下のコードは、私がやっていることですが、失敗したケースのコードで提供されています。私は正規表現ウィザードではないことを認めますが、RegEx Buddyはコード内のフォーマット表現に満足しています。

ご協力いただければ幸いです。私が何か不足している場合は、私に知らせてください。

ありがとうございました。

sData = "12345-1234"; 
m_FormatExpression = "^(\\d{5})(-(\\d{4}))?$"; 

CAtlRegExp<> regex; 
REParseError status = regex.Parse(m_FormatExpression); 

if(REPARSE_ERROR_OK == status) 
{ 
    CAtlREMatchContext<> match; 
    if(regex.Match(sData, &match)) 
    { 
     result = true; 
    } 
} 

答えて

1

編集:私はこの問題を考え出したときは完全に私の答えを変更しました。

クラスは中カッコでの繰り返し回数をサポートしていません{};それはマッチオブジェクトを返すためにそれらを使用します。式の中の54は、一致しなければならないリテラル文字でした。テストしていた文字列には5があり、4の部分はオプションです。この式は完全に動作します。

m_FormatExpression = "^\\d\\d\\d\\d\\d(-\\d\\d\\d\\d)?$"; 
+0

ヒントはありますが、何もありません。アンカーを追加すると、アンカーが一致しません。私は無用に、かなりの順列を試しました。興味深いのは、 "^。* $"が何かにマッチすることです。 – DevSolo

+0

@DevSolo、全く新しい答え。あなたはそれを見るときにあなたの額を打つつもりです。 –

+0

努力してくれてありがとうございます。しかし、午前中に戦った後、私はブーストに切り替えました。これらはカスタム検証のためのものであり、正規表現をバグのように見えるものに切り替える必要はありません。それはあなたの答えのクレジットを与えてくれます。再度、感謝します。 – DevSolo