- 題名: 正規表現?
- 日時: 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
使い方はこんな感じお願いします。
※(−−−)はおまかせします。適当なモノを入れてください