こんにちは、ただいまC#の正規表現機能について勉強しております。
C#のソースの中で散らばっている記述を解析するプログラムを正規表現機能を利用して書いております。
その中でいくつかわからないことがでてきました。
".+[^-~。-゜^\r\n^\t]"
この記述で””で囲まれている全角文字列を検出できるのですが
MessageBox.show("テキスト","タイトル"); → テキスト","タイトル
のように1行に複数のダブルコーテーションがある場合はつながって出てきてしまいます。
これを分離するためにはどうすればよいでしょうか。
/^(?!.*//).$/m
この記述でコメント行 // が除外できると思うのですが、
「+=」 (?=\+\=) といった特定の文字列を含む行を検索する際にどう記述すればよいかわかりません。
このような場合はどうすればよいでしょうか。
C# 正規表現について
Re: C# 正規表現について
参照) .NET Compiler Platform (a.k.a. Roslyn)ソース勉強中 さんが書きました:C#のソースの中で散らばっている記述を解析するプログラムを正規表現機能を利用して書いております。
コンパイラの構文解析結果等を利用することができるようです。
まず,「全角文字列」とやらをきっちりと定義してください。ソース勉強中 さんが書きました:".+[^-~。-゜^\r\n^\t]"
この記述で””で囲まれている全角文字列を検出できるのですが
MessageBox.show("テキスト","タイトル"); → テキスト","タイトル
のように1行に複数のダブルコーテーションがある場合はつながって出てきてしまいます。
これを分離するためにはどうすればよいでしょうか。
そして,正規表現を読むと,
- U+0022
- 1文字以上の任意文字列
- U+FF3EからU+FF5E,U+3002からU+309C,U+005E,U+000D,U+000A,U+0009
- U+0022
なので,恐らく想定しているものと異なるのではないかと思います。
オフトピック
文字は正しく使ってください。
U+0022 (QUOTATION MARK) と U+201D (RIGHT DOUBLE QUOTATION MARK) は別物なので,上記正規表現からU+201D U+201Dで囲まれた文字列は絶対にマッチしません。
U+0022 (QUOTATION MARK) と U+201D (RIGHT DOUBLE QUOTATION MARK) は別物なので,上記正規表現からU+201D U+201Dで囲まれた文字列は絶対にマッチしません。
なんかややこしいことを書いていますが……。 とかとかでよいと思うのですが,これでは問題なのでしょうか。ソース勉強中 さんが書きました:/^(?!.*//).$/m
この記述でコメント行 // が除外できると思うのですが、
「+=」 (?=\+\=) といった特定の文字列を含む行を検索する際にどう記述すればよいかわかりません。
このような場合はどうすればよいでしょうか。
オフトピック
前提はFile.ReadAllLines等で一気に行分割して読み込んで,Enumeralbe.Whereの中でRegex.IsMatchで判定。
除外するならIsMatchしなかった ( s => !Regex.IsMatch(s, regex) ) ものだけを残せばよい
除外するならIsMatchしなかった ( s => !Regex.IsMatch(s, regex) ) ものだけを残せばよい
-
ソース勉強中
Re: C# 正規表現について
返信ありがとうございます。
なるほど。解析ツールもあるのですね。参考にさせていただきます。
アドバイスの件で作業が進みそうです。後は自力でやってみます。
なるほど。解析ツールもあるのですね。参考にさせていただきます。
アドバイスの件で作業が進みそうです。後は自力でやってみます。