- PR -

\マーク文字の存在チェックについて

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-02-17 12:27
いつもお世話になっています。
C#(ASP2.0.net)
でRegex.Match("abc¥ddd", "¥").Value
で円マークが文字列の中にあるか比較したいのですが
エラーで比較できません。
あと、?マークもできません。
どのように記述すればよいのでしょうか。

よろしくお願いします。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-02-17 12:28 ]
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-02-17 12:42
MSDN
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnbcsharp/htm/csharp2-2.asp

「エスケープシーケンスの表記」をよんでみてください。

それから、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconcharacterescapes.asp
をよんでみてください。

[ メッセージ編集済み 編集者: Blue 編集日時 2006-02-17 12:48 ]
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2006-02-17 14:40
¥や?などはエスケープシーケンスといって特殊な役割をするので、その文字そのものを使いたい場合は記述方法が違います。
とりあえず¥の場合は¥¥と2回続けてみましょう。(でも?は??じゃないですよ)

_________________
☆☆☆☆☆☆☆☆☆☆☆☆☆☆
       しゅう
☆☆☆☆☆☆☆☆☆☆☆☆☆☆

[ メッセージ編集済み 編集者: しゅう 編集日時 2006-02-17 14:41 ]
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-02-17 15:14
Blueさん、しゅうさん返答ありがとうです。

¥¥で試してるのですが、
下記のエラーになってしまいます。

「"¥" - パターンの末尾に無効な ¥があります。」

実際のソースは
if (Regex.Match("123", "¥¥").Value=="¥¥" ){・・・}
です。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-02-17 15:23
非常にややこしいことに、C#のリテラル文字列のエスケープとしての \ と、正規表現のエスケープとしての \ が存在します。
正規表現のエスケープとしては \ は後ろにエスケープ文字として認識する文字(\wとか)が存在してなければ普通の \ として認識しますが、文末に単独でくるのは駄目のようですね。
正規表現の \ のエスケープも二つ並べることですから、C#のリテラル文字列の表現としては \\\\ と4つ並べることになります。
エスケープがややこしい場合は、@ を使うことでC#のリテラル文字列用エスケープ表現を省くことができます。
//詳しくはMSDNの言語仕様のstringの項目とかを読んでください。
これを使えば、@"\\" というリテラル文字列表現が可能です。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-02-17 15:26
2重投稿になったので削除です。すいません。。。


[ メッセージ編集済み 編集者: Blue 編集日時 2006-02-17 15:27 ]
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-02-17 15:26
両方のリンク先読みましたか?

C#では文字列中の¥ はエスケープしないといけない。
正規表現文字列中の¥ もエスケープしないといけない。

ですから。

引用:

未記入さんの書き込み (2006-02-17 15:14) より:
コード:
if (Regex.Match("123", "\\").Value=="\\" ){・・・}




じゃだめっぽいのがわかりますよね?

コード:
if (Regex.Match("123", "\\\\").Value=="\\\\" ){・・・}



コード:
if (Regex.Match("123", @"\\").Value==@"\\" ){・・・}


ではないでしょうか?

プレビューで見えるのと ¥ が入るソースがちがう、、、

[ メッセージ編集済み 編集者: Blue 編集日時 2006-02-17 15:28 ]
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-02-17 17:47
どうもありがとうございます。

if (Regex.Match("123", "¥¥¥¥").Value=="¥¥¥¥" ){・・・}
では、何故かエラーになったので

if (Regex.Match("123", "[¥¥¥¥]").Success ){・・・}
で対処することにしました。

スキルアップ/キャリアアップ(JOB@IT)