- - PR -
\マーク文字の存在チェックについて
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-17 12:27
いつもお世話になっています。
C#(ASP2.0.net) でRegex.Match("abc¥ddd", "¥").Value で円マークが文字列の中にあるか比較したいのですが エラーで比較できません。 あと、?マークもできません。 どのように記述すればよいのでしょうか。 よろしくお願いします。 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-02-17 12:28 ] | ||||||||||||||||
|
投稿日時: 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 ] | ||||||||||||||||
|
投稿日時: 2006-02-17 14:40
¥や?などはエスケープシーケンスといって特殊な役割をするので、その文字そのものを使いたい場合は記述方法が違います。
とりあえず¥の場合は¥¥と2回続けてみましょう。(でも?は??じゃないですよ) _________________ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ しゅう ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ [ メッセージ編集済み 編集者: しゅう 編集日時 2006-02-17 14:41 ] | ||||||||||||||||
|
投稿日時: 2006-02-17 15:14
Blueさん、しゅうさん返答ありがとうです。
¥¥で試してるのですが、 下記のエラーになってしまいます。 「"¥" - パターンの末尾に無効な ¥があります。」 実際のソースは if (Regex.Match("123", "¥¥").Value=="¥¥" ){・・・} です。 | ||||||||||||||||
|
投稿日時: 2006-02-17 15:23
非常にややこしいことに、C#のリテラル文字列のエスケープとしての \ と、正規表現のエスケープとしての \ が存在します。
正規表現のエスケープとしては \ は後ろにエスケープ文字として認識する文字(\wとか)が存在してなければ普通の \ として認識しますが、文末に単独でくるのは駄目のようですね。 正規表現の \ のエスケープも二つ並べることですから、C#のリテラル文字列の表現としては \\\\ と4つ並べることになります。 エスケープがややこしい場合は、@ を使うことでC#のリテラル文字列用エスケープ表現を省くことができます。 //詳しくはMSDNの言語仕様のstringの項目とかを読んでください。 これを使えば、@"\\" というリテラル文字列表現が可能です。 | ||||||||||||||||
|
投稿日時: 2006-02-17 15:26
2重投稿になったので削除です。すいません。。。
[ メッセージ編集済み 編集者: Blue 編集日時 2006-02-17 15:27 ] | ||||||||||||||||
|
投稿日時: 2006-02-17 15:26
両方のリンク先読みましたか?
C#では文字列中の¥ はエスケープしないといけない。 正規表現文字列中の¥ もエスケープしないといけない。 ですから。
じゃだめっぽいのがわかりますよね?
か
ではないでしょうか? プレビューで見えるのと ¥ が入るソースがちがう、、、 [ メッセージ編集済み 編集者: Blue 編集日時 2006-02-17 15:28 ] | ||||||||||||||||
|
投稿日時: 2006-02-17 17:47
どうもありがとうございます。
if (Regex.Match("123", "¥¥¥¥").Value=="¥¥¥¥" ){・・・} では、何故かエラーになったので if (Regex.Match("123", "[¥¥¥¥]").Success ){・・・} で対処することにしました。 |