正規表現で元の文章から文字のある箇所からある箇所までを抜き出したいと思ってますが
なかなかうまく抜き出せません。
***********************************************
元の文章
<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
どなたかお分かりになられる方がいらっしゃいましたらご教授願います。
宜しくお願い致します。
> この間にある文字すべて(改行含む)
『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
魔界の仮面弁士様ご教授有難う御座います。
早速試しました。
無事希望の処理を行うことが出来ました。
まさか配列にするとは思いもしませんでした。
本当に感謝です。
ちなみに今後の為に正規表現であればどのようにするのでしょうか??
お手数ですが、教えて頂けると幸いです。
宜しくお願い致します。
そんな質問して、とんちんかんだろ。
入門の本を、5回読みかえすコトが肝要である。
{1を知って10を知る}ってのあるけど
君の場合は{100の質問をして0を得る}
はい。GameOver
1を知って10を知る
10を知って100を知る
100を知って1000を知る
1000を知って10000を知る
10000を知って100000000を知る
億を知って知らぬふり
おや、2進数ですか。(笑)
ビット演算してるじゃん。
先頭に">"が入ってしまいますが、以下で、どうでしょう?
.pattern = "(>)([^<]+)"
VBSでしか試していませんが...
間違ってたらごめんなさい m(_ _)m
# もう見ていないかな?
> ちなみに今後の為に正規表現であればどのようにするのでしょうか??
正規表現は苦手なのですが、これでどうでしょうか。
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>)"
だと、末尾の『後続文字列』は取り出せません。
> ただし先の配列パターンとは、結果が微妙に異なる事に注意してください。
こうすれば同じになるかな。
re.Pattern = "(^|$|[^>])+((?=<HR color=#000000 WIDTH=90% SIZE=2>)|$)"
魔界の仮面弁士さん、すごいです!
ほんとに一致するので、感動しました!
質問者ではないですが、参考にさせていただきます。
勉強になりました、ありがとうございました m(_ _)m
ツイート | ![]() |