正規表現についての質問

このQ&Aのポイント
  • VB6で正規表現を使い、HTMLコメントのみを抜き出す方法について教えてください。
  • 指定したパターンにマッチするHTMLコメントを抜き出すVB6の正規表現の書き方を教えてください。
  • VB6での正規表現を使ったHTMLコメントの抽出方法について教えてください。
回答を見る
  • ベストアンサー

正規表現について

VB6ですが・・・ '次のようなコードがあって <!-- と --> に囲まれる文字列を抜き出したのですが 'どのようなパターンマッチを書けばいいのでしょうか? 'HTMLのコメントのみを抜き出したいと思っています。 Const s = "<!--今日-->" _ & "<!--僕は--><!--正規表現を--><!--勉強します-->" Dim x As RegExp Dim v As match Set x = New RegExp x.Pattern = "パターン" x.Global = True For Each v In x.Execute(s) Debug.Print v.Value Next

質問者が選んだベストアンサー

  • ベストアンサー
  • perse
  • ベストアンサー率74% (113/152)
回答No.1

vb6でも正規表現使えたんですね。 多分コンナ感じでいいと思います。 Dim s As String s = s & "<!--今日-->" s = s & "余計な" s = s & "<!--僕は-->" s = s & "文字を" s = s & "<!--正規表現を-->" s = s & "入れときます" s = s & "<!--勉強します-->" Dim x As RegExp Dim v As Match Set x = New RegExp x.Pattern = "<!--(.*?)-->" x.Global = True For Each v In x.Execute(s) Debug.Print v.SubMatches(0) Next '[出力結果] '今日 '僕は '正規表現を '勉強します

参考URL:
http://cheb.sakura.ne.jp/gena/blog/archives/2006/03/vb60.html

関連するQ&A

  • 正規表現について

    ExcelにてVBScriptの正規表現を使用していますが、 理解できないところがあるので、教えてください 1.EXCEL VBAにて下記のコードがあります Sub Sample2() Const strCHK As String = "000AAA111BBB2222BBB333" Dim RE, strPattern As String, i As Long, msg As String, reMatch, Item Set RE = CreateObject("VBScript.RegExp") strPattern = "AAA.+bbb" With RE .Pattern = strPattern .IgnoreCase = True .Global = True Set reMatch = .Execute(strCHK) For Each Item In reMatch Debug.Print Item.Value & " FirstIndex→" & Item.FirstIndex & " Length→" & Item.Length Next End With Set reMatch = Nothing Set RE = Nothing End Sub 2.上記を動作させると、イミディエイトに下記が出力されます AAA111BBB2222BBB FirstIndex→3 Length→16 3.疑問 strPattern = "AAA.+bbb"にて検索しているのに、 AAA111BBBが表示されないのは、何故なのでしょうか? よろしくお願いします

  • vbaで正規表現

    正規表現のコードなんですが、 上手く動きません。 何故でしょうか… Sub Test() Dim reg As Object Dim ans As Object Dim c As Range         Set reg = CreateObject("VBScript.RegExp")     For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp))             With reg             .Pattern = "^【[(1)-(20)](\d*/\d*)"             Set ans = .Execute(c.Value)         End With                 If ans > 0 Then             If Len(ans(0).submatches(0)) > 0 Then                             Debug.Print c.Address & "|" & ans(0).submatches(0)                             End If         End If             Next     End Sub

  • VBS、正規表現でドメインを取りたい。

    VBScriptで開発をしています。 文字列からドメインだけを取得したくて、ネットで調べて以下のような コードを書いてみましたが、うまくいきません。 正規表現がうまくマッチしてこないようなのですが、初心者故よくわからず…。 おかしい点、修正すべき点を教えていただけないでしょうか。 Dim reg Set reg = Server.CreateObject("VBScript.RegExp") reg.Pattern = "/^[httpsfile]+:\/{2,3}([0-9a-zA-Z\.\-:]+?):?[0-9]*?\//i" Dim testUrl testUrl = "http://www.test.co.jp/test.html" Set Matches = ObjRegExp.Execute(testUrl) Dim Matches Dim Match Dim StrTest For Each Match in Matches StrTest = Match.value Next

  • 正規表現 Microsoft VBScript Regular Expression 5.5

    Microsoft VBScript Regular Expression 5.5を参照設定でVBから使ってます。 このRegExpオブジェクトがどうも挙動不審。 Dim REFind As New RegExp REFind.Pattern = "そのた" REFind.IgnoreCase = True REFind.Global = True REFind.MultiLine = True If REFind.Test(moji) Then hogehoge .... というところで、まずぜんぜん "そのた" という文字列が入った文字列にマッチしません。 REFind.Pattern = "の" とかやると、"そのた\ほげほげ" とかにはマッチしますが、"ほげほげ そのた" とかにはマッチしません。 内部で日本語には対応してないんでしょうか? Replaceメソッドで置換文字列としてUNICODE依存のハートマークなどを入れてみましたが、ちゃんとハートに置換してくれました。 だから内部処理はUNICODEだと思うのですが。 それとも、そもそもVBScriptとか書いてあるものをVBから使うのが間違い? ちなみにこのプログラムはFindFirstFileWから受け取ったファイルを正規表現で絞って、さらに正規表現を使って一括でファイル名の変更やコピーなどを行うプログラムです(全然できてませんが)。 表示にはMSForms2.0を使い、正規表現の部分を除けば、ちゃんとFindFirstFileWから受け取ったハートマーク付きのファイルを表示しています。 特にUNICODE依存の文字に置換しようとか思ってるわけじゃないですが。 なので、表示部などのバグではないと思います。 この挙動不審の原因が分かる方、または挙動不審でない正規表現を扱える(できればUNICODE)オブジェクトライブラリなどをご存じの方いらっしゃったらお願いします。 --- W2K+VB6

  • VBAの正規表現で特定のフレーズの出現回数を数えるには?

    VBスクリプトでの正規表現について質問します。 例として、次のようなプログラムを作成し、メッセージボックスに"2回"と表示されるような結果を期待しているのですが、"1回"と表示されて困っています。2回と表示されるようにするには、どのようにすればよいのでしょうか?アドバイスをお願いします。 Dim objRegex, objMatches, objMatch As Object Dim intRslt As Integer Dim strSource,strPattern As String Set objRegex = CreateObject("VBScript.RegExp") strSource = "お米の国と呼ばれる日本。お米のお国処は、秋田" strPattern ="お米.*国" With objRegex .Pattern = strPattern .ignorecase = True '.Global = True End With Set objMatches = objRegex.Execute(strSource) intRslt = objMatches.Count msgbox(intRslt & "回") エクセルに使用するため、"VBScript.RegExp"での動作環境になります。

  • 正規表現-数字

    VB6で開発しています。 ひとつのテキストボックスがあり(MAXLENGTHが4)、 半角数字or小数点しか入力できないように制御しています。 下記正規表現確認関数で、 00.0~99.9の値のみ認証したいのですが、 (チェック前に Format( XX , '00.0')に変換してます) ○ 3 ○ 3.3 ○ 33 ○ 33.3 × 3.33 × .333 × 333 △ 3.00 → 3.0に変換させる パターンマッチング (\d{1,2}.\d|\d{1,2})ですと 本来×の333がOKとなってしまいます。 正規表現が間違っているのでしょうか? アドバイスお願いします。 関数はこちら Public Function RegExpCheck(ByVal ChkString As String, _ ByVal RegPattern As String) As Boolean '(一部省略) '引数:ChkString 正規表現確認対象文字 ' RegPattern パターン '戻り値:True マッチしている ' :False マッチしていない、あるいは文字・パターンが空白 '(一部省略) Dim reg As New RegExp RegExpCheck = False On Error GoTo RegErr '引数空白チェック・・・空白の場合はFalseを返す '対象文字列 If Trim$(ChkString) = vbNullString Then Exit Function End If 'パターン If Trim$(RegPattern) = vbNullString Then Exit Function End If reg.Pattern = RegPattern If reg.Test(CStr(ChkString)) = True Then RegExpCheck = True End If Exit Function RegErr:

  • .NET のスマートな正規表現の記述の仕方

    VB8 (2005)で、正規表現の書き方ですが、抽出する場合は、 以下のようにしましたが、抽出せず、単にマッチしたかとうが If文で判別する方法が知りたいです。 Imports System.Text.RegularExpressions '正規表現 Dim dat As String = "TEST 01" Dim ptn As String 'パターン Dim r As Regex ' Dim dv As String '部分 '抽出 ptn = "^TEST ([0-9]+)$" r = New Regex(ptn, RegexOptions.IgnoreCase) For Each m As Match In r.Matches(dat) dv = m.Groups(1).Value() MsgBox("抽出=[" & dv & "]") Next あと、上のようにFor文で回していますが、Globalでなく、今回は1つだけの抽出で、しかも1つだけの()なので、これをFor文を使わずに直接取得する書き方はあるのでしょうか? それ以前に、.NETの正規表現の書き方が一般的でなければ、ご指導お願い致します。

  • ExcelでRegExpのFunctionの作成

    エクセルVBAで、文字列と正規パターンを引数として渡すと、マッチした文字位置の羅列を","区切りの文字列で返すようなFunctionを作ろうと考えています。なかなかうまく作れなくて困っています。どなたか、詳しいかたいらっしゃいましたら教えて頂けないでしょうか?宜しくお願いいたします。 発生する実行時エラー 実行時エラー'5020': 'Execute'メソッドは失敗しました:'IRegExp2'オブジェクト 追伸:ネットで、自動作成してくれるサイトがありそのコードを参考にアレンジしました。つじつまが合わない部分は、私の改編によるものだと思います。 Function Get_Position_RegExp(MySource As String, MyPattern As String) As Variant Dim MyReg As RegExp Dim MyMatch As MatchCollection Dim i As Match Set MyReg = CreateObject("VBScript.RegExp") With MyReg .Pattern = MyPattern .Global = True Set MyMatch = .Execute(MySource) End With Get_Position_RegExp = "" For Each i In MyMatch Get_Position_RegExp = Get_Position_RegExp & "," & i.FirstIndex + 1 Next Set MyMatch = Nothing Set MyReg = Nothing End Function

  • これは正規表現とは言えないでしょうか?

    正規表現を勉強しようと思っているのですが まずはじめに確認させて下さい。VBAです。 Sub 正規表現() If a Like "*a*" Then End If End Sub は正規表現とは言えないでしょうか? *を使っているからそう思いました。 Dim re As RegExp Set re = New RegExp を使わないと、正規表現といえないのでしょうか? よろしくお願い致します。

  • .NET正規表現で(?=...)を使えない?

    お世話になります。 以下のページ(.NET Framework 開発者ガイド>グループ化構成体) http://msdn.microsoft.com/ja-jp/library/bs2twtah(VS.80).aspx に、.NET正規表現について以下のようなパターンがあります。  (?= subexpression) ゼロ幅の正の先読みアサーションです。(略)  (?! subexpression) ゼロ幅の負の先読みアサーションです。(略)  (?<= subexpression) ゼロ幅の正の後読みアサーションです。(略)  (?<! subexpression) ゼロ幅の負の後読みアサーションです。(略) これらは、あるパターンが注目している前/後に現れる/現れないかどうかをチェックするけど、それらをキャプチャーしないというものです。 これを使いたいのですが、使えません。以下はVBScriptのプログラムで、WSCript 5.6および5.7で動作させました。(インデントを表現するために全角空白を使っています。実際に動かしてくださる方はタブ文字かなにかに変換願います) Option Explicit Dim objRegExp ' 正規表現オブジェクト Dim objMatches ' 検索結果 Dim objMatch ' 検索結果 Dim strMessage ' 表示メッセージ Set objRegExp = New RegExp objRegExp.Pattern = "(?<=「)[^」]+(?=」)" objRegExp.IgnoreCase = True objRegExp.Global = True Set objMatches = objRegExp.Execute("カッコ前「カッコ中」カッコ後") WScript.Echo objRegExp.Pattern & " は" For Each objMatch In objMatches  strMessage = " " & objMatch.FirstIndex + 1 & _   " 文字目に見つかりました。" & _   "一致した文字列は " & objMatch.Value & " です。"   WScript.Echo strMessage Next Set objMatches = Nothing Set objRegExp = Nothing ところが、  objRegExp.Pattern = "(?<=「)[^」]+(?=」)" のところで「正規表現で構文エラーになりました」となります。 これを、もっと簡単なパターン、  objRegExp.Pattern = "(?:「)[^」]+(?:」)" とすれば動くことは分かっているんですが、今の私の主眼としては「(?<=...)」および「(?=...)」を使いたいんです。 他に、Word 2007 の VBA を試しましたがダメでした。 正規表現自体は合っているようです。 というのは、以下のテストツールで動作できたからです。 http://www.ultrapico.com/Expresso.htm ということで、これらの新しい .NET 正規表現を VBScript や VBA で動かす方法はあるでしょうか。 よろしくお願いいたします。

専門家に質問してみよう