- 題名: 正規表現?
- 日時: 2004/11/09 14:05:27
- ID: 7243
- この記事の返信元:
- (なし)
- この記事への返信:
- [7247] Re[1]: 正規表現?2004/11/09 15:36:42
- ツリーを表示
答えるのはどうなのか、とも思いますが・・・
まぁ、ざっと。
textbox1(マルチライン)・textbox2(マルチライン)・button1を
貼ったフォームに以下を貼って試してみてください。
'───────────────────────────
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'画面にはtextbox1・textbox2・button1があるものとする。
'テキストボックスは1が元データ、2が結果。
'検証するテキスト例:
'981-3203
'101-0016
'980
'aaaaa
'111-11111
'aa
'a123-4567
'結果:
'[981-3203]
'[101-0016]
'検証したいデータ(改行あり)
Dim strs As String = Me.TextBox1.Text
'検証用の表現のインスタンスを生成(複数行として検証するものとする)
'Sharedメソッドもあるが、一応生成する方が個人的には扱いやすいので。
'この例では、「数字3桁-数字4桁」のみで構成されている行、という日本の郵便番号パターン。
'ただし、「郵便番号部分だけをjzipという名前で取得するように」との指示を含む。
Dim rx As New System.Text.RegularExpressions.Regex("^((?<jzip>\d{3}-\d{4})(?:\s*))$", _
System.Text.RegularExpressions.RegexOptions.Multiline)
'複数の該当結果を受け取るコレクション
Dim m As System.Text.RegularExpressions.MatchCollection
'実際に検証を行って結果を受け取る
m = rx.Matches(strs)
'文字列組み立て用。別に候補が少ないのであればこんなもの使わずともstringの単純連結でよい。
Dim rst As New System.Text.StringBuilder
'該当数分ループして・・・
For Each m1 As System.Text.RegularExpressions.Match In m
'jzip部分のみを使用する。(m1.valueだと、マッチ全体になるので色々邪魔。)
rst.Append("[" & m1.Groups("jzip").Value & "]" & vbCrLf)
Next
'結果テキストボックスに表示
TextBox2.Text = rst.ToString
End Sub
詳細はマニュアルで
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpgenref/html/cpconregularexpressionslanguageelements.htm
(「正規表現言語要素」)
を見てください。よくまとまっているようなので。
> デバッグモードで、コマンドウインドウを見るみたいに
いや、別にVisualStudioの開発環境とは関係ないです。
MSの正規表現関連仕様での、拡張用の仕様です。
「グループ化構成体」という機能を使うための指示子もので、キャプチャする範囲等を細々と設定できます。
^((?<jzip>\d{3}-\d{4})(?:\s*))$
(?<jzip>\d{3}-\d{4})は、\d{3}-\d{4}の部分をjzipという名前付きグループとしてキャプチャする指示
(「?<名前>」で、名前付きでキャプチャする指示)、
(?:\s*)は、($の直前にあるので、行の最後の)ホワイトスペース文字(改行やタブ、スペース)の連続とマッチして、
それを破棄する指示(「?:」で、破棄)(ホワイトスペースは受け取りたくないので。)
^:行の先頭、$:行の終端
という感じです。
MSのマニュアル(上記)で、表や例付きで見やすく詳細にまとめてあるようなので、そちらをご覧ください。
こればっかりは、かいつまんで説明しても分からないので、自分でサンプルの小さなプログラムを
いくつか作って勉強するしかないと思います。
(.NETでの正規表現の仕様を勉強する必要があります。)
正規表現は覚えると便利なのでがんばってくださいね。
System.Text.RegularExpressions.Regexというのがよくわかりません。
簡単に説明してくれると助かります。
例えでいいのですので、教えてくれませんか?
ヘルプを見てもさっぱりわかりません。
Dim RG_a As Text.RegularExpressions.Regex
Dim MC_Text As System.Text.RegularExpressions.MatchCollection
Dim STR_a AS String
RG_a = New System.Text.RegularExpressions.Regex(−−−, System.Text.RegularExpressions.RegexOptions.Multiline)
STR_a = MC_Text.Item(0).Value
使い方はこんな感じお願いします。
※(−−−)はおまかせします。適当なモノを入れてください