• 締切済み

VB2005のRegexで全角文字のマッチ

VB2005のRegexで、インターネットのソースコードを取得し”次の10件"というキーワードの位置を取得しようとしていますが、どうもソースコードの時点で、全角文字(2バイト文字)が認識されていないようです。どうすれば、マッチできるでしょうか?教えてください。 仮に、下記のルーチンに、Debug.Print(inputString)を入れて表示させてみると、全角の表示がされていません。 よろしくお願いいたします。 Sub DumpHrefs(ByVal inputString As String) Dim r1 As Regex Dim m1 As Match r1 = New Regex("次の10件≫") m1 = r1.Match(inputString) While m1.Success Debug.WriteLine("次の10件" & " at " & m1.Groups(1).Index.ToString())  m1 = m1.NextMatch()  End While End Sub

みんなの回答

  • sayrun
  • ベストアンサー率100% (1/1)
回答No.1

Debug.WriteLine("次の10件" & " at " & m1.Groups(1).Index.ToString()) のところを Debug.WriteLine("次の10件" & " at " & m1.Groups(0).Index.ToString()) にしてみると思った結果が得られませんか? あるいは以下のコードとか。 For Each g As Group In m1.Groups  Debug.WriteLine("次の10件" & " at " & g.Index.ToString()) Next

関連するQ&A

  • VB.NETの正規表現の検索を教えてください。

    VB.NETの正規表現で文章中(HTMLソース)から番号を抜き取りたいのですが、 先頭の1つだけしか見つけられません。 htmlソース内に 番号:10000 番号:20000 番号:30000 番号:40000 という文字があるので、その後半の10000や20000を取得したいです。 下記のコードで実行すると、10000が4つ出力されてしまいます。 良い方法をご教示頂きたいです。よろしくお願いいたします。 Dim pagedata As String  <---htmlソース Dim reg As Regex reg = New Regex("番号:(?<datano>.+)", RegexOptions.Compiled) Dim DataNo As String m = reg.Match(pagedata) While m.Success = True DataNo = reg.Match(pagedata).Result("${datano}") m = m.NextMatch() Console.WriteLine(DataNo) End While

  • VB.NETの正規表現の書き方を教えてください

    いつもお世話になっております。 また正規表現がわからなくなってしまったのですが、 お助け願えないでしょうか。 Strの中にはこのようなものが入っています。 Str="あいうえお=====かきくけこ=====さしすせそたちつてと=====まみむめも=====なにぬねの" Dim r As Regex Dim m As Match Dim StrR As String r = New Regex("=====.+=====") m = r.Match(Str) While m.Success StrR = m.Value m = m.NextMatch() End While 順番に StrR="=====かきくけこ=====" StrR="=====まみむめも=====" を取得したいのですが、 上記のような書き方だと、 StrR=====かきくけこ=====さしすせそたちつてと=====まみむめも=====" を取得してしまいます。 回数の指定など色々試してはみたのですが、 どうしても目的のとおりにすることができず困っておりまして、 書き方をご教示頂きたくよろしくお願い致します。

  • VB.NETの正規表現をVBAで記述するには

    VB2010.NETのコードをExcel2010のVBAのコードに置き換える作業をしていますが、List1のようにVB.NETのコードには、Inports System.Text.RegularExpressions で.NET正規表現パッケージが使われて、この部分をVBAではどのように記述すればよいのでしょうか。 自分なりにList2のようにしてみましたが、Dim M As MatchのMatchの部分で「ユーザ定義型は定義されていません」というコンパイルエラーが発生します。 参照設定にはSystem.Text.RegularExpressionsが見当たりませんが何を指定すればよいのでしょうか。 Microsoft VBScript Regular Expressions 5.5のRegExpオブジェクトでは後読みができないので大変困っています。 よろしくお願いします。(Windows7) ---List1:VB.NET(正常)--------------- Option Explicit On Option Strict On Imports System.Text.RegularExpressions Module Module1  Sub Main()   Dim SampleText As String = "今日は西暦2014年6月20日です"   Dim M As Match = Regex.Match(SampleText, "(?<=西暦)\d+")   If Not M.Success Then    Console.WriteLine("no match")   Else    Dim MatchedText As String = M.Value    Dim MatchedFrom As Integer = M.Index    Dim MatchedLen As Integer = M.Length    MsgBox("matched [" & MatchedText & "]" & _        " from char#" & MatchedFrom.ToString() & _        " for " & MatchedLen.ToString() & " chars.")   End If  End Sub End Module ---List2:VBA(このコードではエラーになる)----- Option Explicit Sub test()  Dim SampleText As String  Dim M As Match  Dim R As New Regex  Dim MatchedText As String  Dim MatchedFrom As Integer  Dim MatchedLen As Integer  SampleText = "今日は西暦2014年6月20日です"  R = Regex("(?<=西暦)\d+")  M = R.Match(SampleText)  If Not M.Success Then   MsgBox ("no match")  Else   MatchedText = M.Value   MatchedFrom = M.Index   MatchedLen = M.Length   MsgBox("matched [" & MatchedText & "]" & _       " from char#" & MatchedFrom.ToString() & _       " for " & MatchedLen.ToString() & " chars.")  End If End Sub ------------------------------------------

  • VB.NETで正規表現を教えてください。URL文字を取得

    VB.NETなのですが、 htmlソースを変数に入れて、その中からURLを抽出して、 1つずつ保存していくという動作をさせたいのですが、 どうしてもURLを一つずつ取得することができません。 Dim r As Regex Dim m As Match Dim JpgFile As String r = New Regex("http://.+\.jpg") m = r.Match(html) If m.Success = False Then   Else JpgFile = m.Value ここで1つずつ保存 End If 現在、ここまで出来たのですが、 これだと、変数html内に複数のjpgのURLがあると 最初のURLの1文字目から、最後のURLの末尾までを一度に 取得してしまいます。 URLの文字列はhttp://で始まっていて、終わりは・・・.jpg" になっていたり、"がなかったりします。 >で閉じる前に同じタグ内にWidthなどサイズを指定している場合もあります。 また、上記のようにタグ内に書かれていなくて、クリッカブルリンクになっていないURLの場合もありそれも取得したいです。 一つずつ取得する方法や一度に配列に読み込む方法などがありましたら、 ご教示頂けると助かります。 よろしくお願い致します。

  • CSVのRegexでの分割

    期待する結果が得られる正規表現を教えて下さい。 環境はVS2008,FW3.5です。 Module Module1 Sub Main() Dim sBuf As String = """abc,xyz"",""123,456"",777,333" Dim sPtm As String sPtm = "\s*(""(?:[^""]|"""")*""|[^,]*)\s*," Dim oRegex As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(sPtm) Dim sLineData As String() = oRegex.Split(sBuf) For iLoop As Integer = 0 To sLineData.Length - 1 System.Console.WriteLine("{0} : {1}", iLoop, sLineData(iLoop)) Next End Sub End Module 実行結果 0 : 1 : "abc,xyz" 2 : 3 : "123,456" 4 : 5 : 777 6 : 333 期待する結果 0 : "abc,xyz" 1 : "123,456" 2 : 777 3 : 333

  • VB2005でUWSCを実行した後の命令が実行されません。

    VB初心者です。 今VB2005でUWSCを実行してあるwebサイトにログインした後、 そのサイトのHTMLデータを抜き出そうと試みています。 今UWSCを実行してwebサイトにログインはできているのですが、 HTMLデータを抜き出すところで困っています。 下に作成したソースを記述します。稚拙なソースですみません。 ----------------------------------------------------------------------------- Imports System.Text.RegularExpressions Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click System.Diagnostics.Process.Start("C:\uwsc44b\UWSC.exe", "C:\uwsc44b\自動ログイン.uws") Dim reg1 As Regex Dim mat1 As Match reg1 = New Regex("<TD align=left noWrap bgcolor=#ffffff>(.*?)</TD>", RegexOptions.Singleline) mat1 = reg1.Match(TextBox1.Text) While mat1.Success Console.WriteLine(mat1.Value) mat1 = mat1.NextMatch() End While End Sub End Class ----------------------------------------------------------------------------- UWSCの自動ログイン.uwsが実行されている間にVBの他の命令が実行されてしまって いるのではないかと考えています。 どなたかアドバイスをいただけないでしょうか。 よろしくお願い致します。 ※補足 OS : WindowsXP sp2 VB : VisualBasic2005 Express Edition UWSC : uwsc44b (フリーソフト)

  • \(円)記号を置換したい

    Windowsのファイル名に使用禁止文字(\:/*?"<>|)を全角に置換しようと思い、下記のコードを書いてみたのですが、「\」だけが全角に置換されません。 どうしたら、「\」も全角に置換できるでしょうか? よろしくお願いいたします。 Private Function ReplaceZenkaku(ByVal fileName As String) As String     Dim ignoreString As Regex = New Regex("[\\:\/\*\?""<>\|]")     Return ignoreString.Replace(fileName, New MatchEvaluator(AddressOf ReplaceKigou)) End Function Private Function ReplaceKigou(ByVal M As Match) As String     Return Strings.StrConv(M.Value, VbStrConv.Wide) End Function

  • VB2010にて文字の検索と抽出

    下記のようにTextBox1に入力されているとします。 そこで、'<TD><a href="main.py?qtype=userpage&teamnum=162&username=KOTOKO"> KOTOKO </a> </TD>'と書かれた行から、 <a></a>タグで囲まれた' KOTOKO'という文字を検索して、 '<TD> 18 </TD>'と書かれた文字の18と、 <a></a>タグで囲まれた'11346595'と、 <a></a>タグで囲まれた'16184'を取得してMsgBoxに表示したいのですが、 どうすれば出来ますでしょうか? (18、11346595、16184という数字は変動します。) いくら検索しても思うようなものが見つかりませんでした。 因みに、大本のhtmlソースはこちらです。 http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&teamnum=162 ↓これがTextBox1に入力されている値です。 <TR bgcolor=#ffffff> <TD> 18 </TD> <TD><a href="main.py?qtype=userpage&teamnum=162&username=KOTOKO"> KOTOKO </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=11346595" target="_blank"> 11346595 </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=16184&t=wus&bg=3" target="_blank"> 16184 </a> </TD> </TR> <TR bgcolor=#dcdcdc> <TD> 19 </TD> <TD><a href="main.py?qtype=userpage&teamnum=162&username=yukichan"> yukichan </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=yukichan&pts=10625127" target="_blank"> 10625127 </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=yukichan&pts=4769&t=wus&bg=3" target="_blank"> 4769 </a> </TD> </TR> ↓これがVBのコード Public Class Form1 Dim url As String Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load url = "http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&teamnum=162" WebBrowser1.Navigate(url) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.Show() Form2.TextBox1.Text = WebBrowser1.Document.Body.OuterHtml Dim r As New System.Text.RegularExpressions.Regex("KOTOKO ", System.Text.RegularExpressions.RegexOptions.IgnoreCase) 'TextBox1.Text内で正規表現と一致する対象を1つ検索 Dim m As System.Text.RegularExpressions.Match = r.Match(Form2.TextBox1.Text) '次のように一致する対象をすべて検索することもできる 'Dim mc As System.Text.RegularExpressions.MatchCollection = _ ' r.Matches(TextBox1.Text) While m.Success '一致した対象が見つかったときキャプチャした部分文字列を表示 MsgBox(m.Value) '次に一致する対象を検索 m = m.NextMatch() End While End Sub End Class

  • 【VBA】半角カタカナのみを全角にするには?

    http://bekkoame.okwave.jp/qa8979427.html こちらのページを参考にしたのですが カタカナのみ全角にしたいのですが 平仮名がカタカナになってしまいます。 正規表現と言うのがよくわからないので コピペで使ってますが Sub Sample2() Dim myStr As String Dim Match As Object, Matches As Object Dim CW As String With CreateObject("VBScript.RegExp") .Pattern = "[\uFF61-\uFF9F]+" '---(1) .Global = True myStr = "あああイイイ" If Len(myStr) > 0 Then Set Matches = .Execute(myStr) 'マッチしたすべての文字列を置換 For Each Match In Matches myStr = Replace(myStr, Match.Value, _ StrConv(Match.Value, vbWide)) '---(2) Next Match CW = myStr End If End With End Sub だと「あああ」は平仮名のままなのですが myStr = "のののノノノ" にすると、ひらがなの「ののの」が全角カタカナになってしまいます。 Sub test() Call KanaJisF("あああイイイ") End Sub Function KanaJisF(ByVal sSrc As String) As String Dim sTempW As String Dim sTempN As String Dim i As Long ' ' 全角カナに相当する文字コードを総当たりでループ For i = -31852 To -31936 Step -1 sTempW = Chr(i) ' 全角カナ変数に格納 sTempN = StrConv(sTempW, vbNarrow) ' 半角カナに変換して変数に格納 ' ' 半角カナ各文字が、文字列に含まれている場合、全角カナに置換 If InStr(1, sSrc, sTempN) Then sSrc = Replace(sSrc, sTempN, sTempW) Next i ' ' 半角長音、文字列に含まれている場合、全角長音に置換 sTempN = Chr(176) If InStr(sSrc, sTempN) Then sSrc = Replace(sSrc, sTempN, "ー") KanaJisF = sSrc End Function こちらのコードは、「あああ」も全角カタカナになりました。 "のののノノノ"も同様です。 平仮名は平仮名のままにしたいのですが そのような方法はありますか?

  • VB2005で作ったメール送信プログラムで、メール本文が文字化けしてしまいます。

    VB2005でメール送信プログラムを作ったのですが、送信したBODYが文字化けしてしまいます。どう修正すればよいか、教えてください。 以下がそのコードです。 Imports System.Net.mail Public Class Form1 Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Dim tc As Sockets.TcpClient Dim ns As Sockets.NetworkStream Dim stat As String Dim mailData As String Dim mailFrom As String = "", mailSubject As String = "", mailBody As String = "" Dim r As Regex Dim m As Match Dim mailCount As Integer Try tc = New Sockets.TcpClient() tc.Connect(txtPOP3Server.Text, 110) ns = tc.GetStream Dim buff(tc.ReceiveBufferSize) As Byte ns.Read(buff, 0, tc.ReceiveBufferSize) POP3Transmit(ns, "USER " & txtUserName.Text, False) POP3Transmit(ns, "PASS " & txtPassword.Text, False) stat = POP3Transmit(ns, "STAT", False) r = New Regex("\+OK (.*) (.*)") m = r.Match(stat) mailCount = Val(m.Groups(1).Value) If mailCount = 0 Then MsgBox("メールはありません") Else mailData = POP3Transmit(ns, "RETR " & mailCount, True) ParseMail(mailData, mailFrom, mailSubject, mailBody) txtBody.Text = mailBody txtFrom.Text = mailFrom txtSubject.Text = mailSubject End If Dim smtpClt As New Net.Mail.SmtpClient("smtp.mail.yahoo.co.jp", 25) Dim from As String = "****@yahoo.co.jp" Dim toYou As String = DataGridView1(1, 0).Value Dim subject As String = TextBox2.Text Dim body As String = TextBox1.Text Try smtpClt.Send(from, toYou, subject, body) Timer2.Enabled = True ToolStripStatusLabel2.Text = "送信しました。" Catch ex As Exception MessageBox.Show(ex.Message) End Try POP3Transmit(ns, "QUIT", False) ns.Close() tc.Close() Catch ex As Exception MsgBox("メールの受信に失敗しました") End Try End Sub End Class

専門家に質問してみよう