C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

正規表現のMultilineオプション

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■94237 / inTopicNo.1)  正規表現のMultilineオプション
  
□投稿者/ otu (5回)-(2020/03/26(Thu) 13:03:26)

分類:[VB.NET/VB2005 以降] 

【環境】Windows7,.Net4.7.2,WinForms,VB2017

正規表現の勉強をしています。
Multilineオプションを指定して行単位で処理したいのですが希望の結果を得られません。

【処理内容】先頭から2番目の「あ」までをマッチ(行単位で考える)
【対象文字列】"かきくけこ" & vbLf & "あいうえおあいうえおあいうえお"
【希望結果】あいうえおあ

RichTextBoxコントロールで試しているので、改行はLFとしています。
以下のコードでは"かきくけこ"まで含まれてしまいます。
パターン文字列を教えてください。

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim input = "かきくけこ" & vbLf & "あいうえおあいうえおあいうえお"
        Dim pattern = "^[^あ]*あ[^あ\n]*あ"
        Dim ret = Regex.Match(input, pattern, RegexOptions.Multiline)
        Debug.WriteLine(ret)
    End Sub

引用返信 編集キー/
■94239 / inTopicNo.2)  Re[1]: 正規表現のMultilineオプション
□投稿者/ Hongliang (975回)-(2020/03/26(Thu) 13:13:33)
2020/03/26(Thu) 13:22:27 編集(投稿者)

Multilineオプションは^と$の解釈を変えるだけなので、
> ^[^あ]*あ
[^あ]だと改行文字も有効な文字となってしまい、最長一致を探した結果、「かきくけこ\nあ」がマッチすることになるわけですね。
こちらも[^あ\n]として改行文字を一致させないようにすればいいでしょう。

<追記>
1行ずつ処理したいなら、RichTextBoxのLinesプロパティを使って1行ずつマッチングした方が楽な気がします。
引用返信 編集キー/
■94243 / inTopicNo.3)  Re[2]: 正規表現のMultilineオプション
□投稿者/ otu (6回)-(2020/03/26(Thu) 13:22:43)
No94239 (Hongliang さん) に返信
> Multilineオプションは^と$の解釈を変えるだけなので、
>>^[^あ]*あ
> [^あ]だと改行文字も有効な文字となってしまい、最長一致を探した結果、「かきくけこ\nあ」がマッチすることになるわけですね。
> こちらも[^あ\n]として改行文字を一致させないようにすればいいでしょう。

あ、なるほど........
言われてみれば単純なことでも、教えてもらうまで気が付かないものですね。
どうも、ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ