正規表現で・・・


ちー子  2009-12-02 18:12:37  No: 142921  IP: 192.*.*.*

正規表現で元の文章から文字のある箇所からある箇所までを抜き出したいと思ってますが
なかなかうまく抜き出せません。

***********************************************
元の文章
<HR color=#000000 WIDTH=90% SIZE=2>123[a]
あいうえお
かきくけこ
<HR color=#000000 WIDTH=90% SIZE=2>456[b]
さしすせそ
たちつてと
<HR color=#000000 WIDTH=90% SIZE=2>
***********************************************
抜き出したい文字
<HR color=#000000 WIDTH=90% SIZE=2>
この間にある文字すべて(改行含む)
<HR color=#000000 WIDTH=90% SIZE=2>
***********************************************

パターンマッチングで下記が知りたいです。
obj.Pattern = ""←ココが分かりかねます。

開発環境:VB6.0

どなたかお分かりになられる方がいらっしゃいましたらご教授願います。
宜しくお願い致します。

編集 削除
魔界の仮面弁士  2009-12-02 18:54:00  No: 142922  IP: 192.*.*.*

> この間にある文字すべて(改行含む)
『123[a]¶あいうえお¶かきくけこ¶』と
『456[b]¶さしすせそ¶たちつてと¶』が
取得できれば良いという事でしょうか?
(改行文字を¶で表しています)


だとすれば今回は、区切り文字列が
『<HR color=#000000 WIDTH=90% SIZE=2>』
で固定されているので、正規表現を使わずとも処理できそうです。


Option Explicit

Private Sub Form_Load()
    Label1.Caption = _
        "<HR color=#000000 WIDTH=90% SIZE=2>123[a]" & vbCrLf & _
        "あいうえお" & vbCrLf & _
        "かきくけこ" & vbCrLf & _
        "<HR color=#000000 WIDTH=90% SIZE=2>456[b]" & vbCrLf & _
        "さしすせそ" & vbCrLf & _
        "たちつてと" & vbCrLf & _
        "<HR color=#000000 WIDTH=90% SIZE=2>"
End Sub

Private Sub Command1_Click()
    Dim result() As String
    result = Split(Label1.Caption, "<HR color=#000000 WIDTH=90% SIZE=2>")

    '確認
    Dim v As Variant
    For Each v In result
        Debug.Print "『" & v & "』"
    Next
End Sub

編集 削除
ちー子  2009-12-02 19:07:11  No: 142923  IP: 192.*.*.*

魔界の仮面弁士様ご教授有難う御座います。
早速試しました。
無事希望の処理を行うことが出来ました。
まさか配列にするとは思いもしませんでした。
本当に感謝です。
ちなみに今後の為に正規表現であればどのようにするのでしょうか??
お手数ですが、教えて頂けると幸いです。
宜しくお願い致します。

編集 削除
de?  2009-12-02 21:06:54  No: 142924  IP: 192.*.*.*

そんな質問して、とんちんかんだろ。
入門の本を、5回読みかえすコトが肝要である。
{1を知って10を知る}ってのあるけど
君の場合は{100の質問をして0を得る}
はい。GameOver

編集 削除
おべっか  2009-12-03 08:50:06  No: 142925  IP: 192.*.*.*

1を知って10を知る
10を知って100を知る
100を知って1000を知る

1000を知って10000を知る
10000を知って100000000を知る
億を知って知らぬふり

編集 削除
からから  2009-12-03 19:30:03  No: 142926  IP: 192.*.*.*

おや、2進数ですか。(笑)
ビット演算してるじゃん。

編集 削除
wu3  2009-12-18 16:12:05  No: 142927  IP: 192.*.*.*

先頭に">"が入ってしまいますが、以下で、どうでしょう?

.pattern = "(>)([^<]+)"

VBSでしか試していませんが...
間違ってたらごめんなさい m(_ _)m

編集 削除
魔界の仮面弁士  2009-12-19 11:09:09  No: 142928  IP: 192.*.*.*

# もう見ていないかな?

> ちなみに今後の為に正規表現であればどのようにするのでしょうか??
正規表現は苦手なのですが、これでどうでしょうか。

Option Explicit

Private Sub Form_Load()
    Label1.Caption = _
        "<HR color=#000000 WIDTH=90% SIZE=2>123[a]" & vbCrLf & _
        "あいうえお" & vbCrLf & _
        "かきくけこ" & vbCrLf & _
        "<HR color=#000000 WIDTH=90% SIZE=2>456[b]" & vbCrLf & _
        "さしすせそ" & vbCrLf & _
        "たちつてと" & vbCrLf & _
        "<HR color=#000000 WIDTH=90% SIZE=2>"
End Sub

Private Sub Command1_Click()
'参照設定に "Microsoft VBScript Regular Expressions 5.5" を追加
    Dim re As RegExp
    Set re = New RegExp
    
    re.Global = True
    re.Pattern = "[^>]+(?=<HR color=#000000 WIDTH=90% SIZE=2>)"

    '確認
    Dim m As Match
    For Each m In re.Execute(Label1.Caption)
        Debug.Print "【" & m.Value & "】"
    Next
End Sub

これにより、以下の結果が出力されます。

【123[a]
あいうえお
かきくけこ

【456[b]
さしすせそ
たちつてと



ただし先の配列パターンとは、結果が微妙に異なる事に注意してください。
たとえば、検索対象の文字列が
    Label1.Caption = _
        "先導文字列<HR color=#000000 WIDTH=90% SIZE=2>123[a]" & vbCrLf & _
        "あいうえお" & vbCrLf & _
        "かきくけこ" & vbCrLf & _
        "<HR color=#000000 WIDTH=90% SIZE=2>456[b]" & vbCrLf & _
        "さしすせそ" & vbCrLf & _
        "たちつてと" & vbCrLf & _
        "<HR color=#000000 WIDTH=90% SIZE=2>後続文字列"
であった場合、
  'Split 関数で配列化
  result = Split(Label1.Caption, "<HR color=#000000 WIDTH=90% SIZE=2>")
を使えば、末尾の『後続文字列』の部分も取り出せますが、
  '正規表現による検出
  re.Pattern = "[^>]+(?=<HR color=#000000 WIDTH=90% SIZE=2>)"
だと、末尾の『後続文字列』は取り出せません。

編集 削除
魔界の仮面弁士  2009-12-19 11:17:32  No: 142929  IP: 192.*.*.*

> ただし先の配列パターンとは、結果が微妙に異なる事に注意してください。
こうすれば同じになるかな。

re.Pattern = "(^|$|[^>])+((?=<HR color=#000000 WIDTH=90% SIZE=2>)|$)"

編集 削除
wu3  2009-12-21 09:04:33  No: 142930  IP: 192.*.*.*

魔界の仮面弁士さん、すごいです!
ほんとに一致するので、感動しました!
質問者ではないですが、参考にさせていただきます。
勉強になりました、ありがとうございました  m(_ _)m

編集 削除