プロが教えるわが家の防犯対策術!

accessの正規表現で、マッチした部分の一部を取り出したいと思っています。

秀丸で言えば、
------------------------

文字列 あいうえお
↓↓↓
正規表現 あ(.*)お
置き換え文字 \1
↓↓↓
抽出 いうえ

------------------------
って感じの「¥1」みたいなのがほしいと考えています。

現在、下記のような感じで、対象文字を抽出しています。
ここから、また正規表現でほしい部分を抽出しなければいけないのでしょうか?



【上の例で言えば、「あいうえお」を抽出する関数】

------------------------
Function 抜き出し(ByVal 指定文字列 As String) As String

Dim 正規表現, 一致集団, 一致要素

Set 正規表現 = CreateObject("VBScript.RegExp")

正規表現.Pattern = "購入日時[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日 [0-9]{1,2}時[0-9]{1,2}分"
正規表現.MultiLine = True

Set 一致集団 = 正規表現.Execute(指定文字列)

For Each 一致要素 In 一致集団

抜き出し = 一致要素.Value
Exit For
Next
End Function
------------------------

これだと、

購入日時2012年1月25日 17時53分

がマッチします。
でもほしいのは、

2012年1月25日 17時53分

の部分だけ。

何かいい方法は無いでしょうか?
よろしくお願いします。

A 回答 (2件)

今日を。



正規表現で解決するとすれば次のようになります。

Sub test()
Dim sss As String
sss = "aaaa購入日時2012年1月25日 17時53分bbbbcccc購入日時2012年1月25日 17時53分dddd"
' sss = "aaa"
sss = 抜き出し(sss)
Debug.Print sss
End Sub

Function 抜き出し(ByVal 指定文字列 As String) As String
Dim 正規表現, 一致集団, 一致要素
Set 正規表現 = CreateObject("VBScript.RegExp")
正規表現.Pattern = "購入日時([0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日 [0-9]{1,2}時[0-9]{1,2}分)"
'パターンを括弧で囲む
正規表現.MultiLine = True
Set 一致集団 = 正規表現.Execute(指定文字列)
'正規表現.Global = True を指定していないので、一件だけ抽出する。
Debug.Print 一致集団.Count

If 一致集団.Count > 0 Then
抜き出し = 一致集団(0).SubMatches(0)
'.SubMatches(0) 'Patternを()でククッタ箇所取り出し
End If
End Function


それ以外に、置き換えで、"購入日時"を空白にするとか
Right関数で、4文字を取り除くとか
    • good
    • 1
この回答へのお礼

ありがとうござます。
複雑なので、よくわかっていませんが、ゆっくり解読したいと思います。
なんか、SubMatchesで出来そうな気がします。
ありがとうございました。

お礼日時:2012/05/05 22:16

#1で回答したものです。



前の回答をづぎの物に代えて、実行してみてください。

正規表現.Pattern = "購入日時([0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日 )([0-9]{1,2}時[0-9]{1,2}分)"

抜き出し = 一致集団(0).SubMatches(1)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています