
正規表現で数字をメタ文字に置換えると結果が異なる理由が分かりません。
現在、正規表現でチェックするコードがあります。
この正規表現中の数字「9」を「\d」に置換えました。
置換え前) 置換え後)
9([x]c+)*& \d([x]c+)*&
VisualStudio2008のC#にて実装し、文字列「9xc1&」で
テストすると結果が異なりました。
(Regexクラスのオプションはデフォルトのまま)
Regex.IsMatch("9xc1&", @"9([x]c+)*&") == false
Regex.IsMatch("9xc1&", @"\d([x]c+)*&") == true
置換え前が正しいと思うのですが、メタ文字に置換えると
グループやアスタリスクの影響を受けるのでしょうか?
アドバイスをお願い致します。
No.2ベストアンサー
- 回答日時:
\dは9と同じではなく、[0-9]と同じです。
マッチの流れはこんな感じになるのではないでしょうか?
1.正規表現\dが9にマッチする。
2.正規表現([x]c+)*がxcにマッチする。
3.正規表現&がマッチ失敗となる。
4.正規表現([x]c+)*がマッチをあきらめる。
5.再び、正規表現&が、マッチを試みるがマッチ失敗となる。
まだ、未調査のテキストがある為、正規表現は続く。
6.今度は、正規表現\dが1にマッチする。
7.正規表現([x]c+)*がマッチを試みるがマッチ失敗となり、マッチをあきらめる。
8.正規表現&がマッチに成功し、全体としてマッチが成功する。
ご回答ありがとうございます。
テキストの先頭からマッチを進めて、未調査テキストがある限り
パターンマッチを最初から繰り返し続けるということですね。
新たにテスト文字列のバリエーションを増やして実行したところ、
「9xc^%2&」もtrueとなってしまいました。
ご回答の通り、ハットパーセントまで読み捨てて
「2&」で一致すると考えると納得いきます。
数日間ずっと考えていましたが、とりあえず整理つきました。
この度はありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のExcelファイルをマージす...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】並び替えの範囲が、...
-
VBAの「To」という語句について
-
vbsでのwebフォームへの入力制限?
-
Vba セルの4辺について罫線が有...
-
【マクロ】変数を使った、文字...
-
Vba FileSystemObject オブジェ...
-
エクセルのマクロについて教え...
-
VBAでユーザーフォームを指定回...
-
【ExcelVBA】値を変更しながら...
-
【マクロ】シートの変数へ入れ...
-
エクセルのVBAコードと数式につ...
-
ワードの図形にマクロを登録で...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
【マクロ】モジュール変数の記...
-
Excelのマクロについて教えてく...
-
ダブルクリックで貼り付けた画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マッチングアプリで新しくアカ...
-
正規表現
-
正規表現の実行レポートは作成...
-
タグを正規表現で完全に削除
-
この正規表現の意味は?
-
謎の半角■文字を正規表現で文字...
-
文字同士の比較~抜き出し
-
文字のマッチングについて
-
Perlで別ファイルから文字列の抽出
-
/ [ 【 の文字をマッチさ...
-
置き換えについて
-
正規表現 \\b123bと^123$は同じ?
-
perlで記号除去を行いたいので...
-
リナックスの grepコマンド ...
-
正規表現で2種類ある括弧を区別...
-
記号とあらば、1文字でも全て...
-
perlのマッチでマッチしたい物...
-
正規表現の展開
-
パイプ以外をエスケープしてマ...
-
3回以上連続する文字(どんな...
おすすめ情報