2011-11-28 9 views
7

正規表現で最初に一致した結果の位置を取得するにはどうすればよいですか?下記参照。 1についてはExcel VBA正規表現一致位置

Function MYMATCH(strValue As String, strPattern As String, Optional blnCase As Boolean = True, Optional blnBoolean = True) As String 
    Dim objRegEx As Object 
    Dim strPosition As Integer 

    ' Create regular expression. 
    Set objRegEx = CreateObject("VBScript.RegExp") 
    objRegEx.Pattern = strPattern 
    objRegEx.IgnoreCase = blnCase 

    ' Do the search match. 
    strPosition = objRegEx.Match(strValue) 

    MYMATCH = strPosition 
End Function 

、私は完全に.Matchは(文字列、整数など)を返すされているものかどうか分かりません。私が見つけた1つの解決策は、Matchオブジェクトを作成してそこから取得するべきだと言ったが、はMatchオブジェクトを認識しない。とは異なり、私はまた、次のようなsome codeを見てきましたが、私は必ずしも値、ちょうど最初の文字列の配置を探していないよ:

If allMatches.count <> 0 Then 
    result = allMatches.Item(0).submatches.Item(0) 
End If 

はやや変数を変更する私には、主に起因する(上記の可能な構文エラーのいずれかを無視して右と左のタイプ)、どうすれば簡単に/簡単にこれを達成できますか?

ありがとうございます!

+0

私の誤りです。私はそれが誰の評判にも役立つことを忘れていました。このサイトの上に)...それ以外に、私はそれを自分で考え出しました...もう一度。 – Jonathan

+0

しかし、私はこの問題に遭遇する他の人の利益のために8時間で私の答えを掲示します。 – Jonathan

+1

なぜ今は8時間ですか? – JimmyPena

答えて

12

あなたは、この問題を持つことも他人の利益のために、すなわち

Function MYMATCH(strValue As String, strPattern As String, Optional blnCase As Boolean = True, Optional blnBoolean = True) As String 
    Dim objRegEx As Object 
    Dim strPosition As Integer 
    Dim RegMC 

    ' Create regular expression. 
    Set objRegEx = CreateObject("VBScript.RegExp") 
    With objRegEx 
     .Pattern = strPattern 
     .IgnoreCase = blnCase 
     If .test(strValue) Then 
      Set RegMC = .Execute(strValue) 
      MYMATCH = RegMC(0).firstindex + 1 
     Else 
      MYMATCH = "no match" 
     End If 
    End With 
End Function 

Sub TestMe() 
    MsgBox MYMATCH("test 1", "\d+") 
End Sub 
4

Execute方法を使用して、一致の位置を返すようにFirstIndexを使用することができ、私はついにそれを考え出しました。代わりにMatchタイプの

Option Explicit 

Function CHAMATCH(strValue As String, strPattern As String, Optional blnCase As Boolean = True, Optional blnBoolean = True) As String 
    Dim objRegEx As Object 
    Dim objPosition As Object 
    Dim strPosition As String 

    ' Create regular expression. 
    Set objRegEx = CreateObject("VBScript.RegExp") 
    objRegEx.Pattern = strPattern 
    objRegEx.IgnoreCase = blnCase 

    ' Do the search match. 
    Set objPosition = objRegEx.Execute(strValue) 
    strPosition = objPosition(0).FirstIndex 

    CHAMATCH = strPosition 
End Function 

、普通のObjectタイプは(それが戻っていますすべてのクラスで考慮して)行います。インデックスの所在地を取得する場合は、.FirstIndexを使用してください。値をご希望の場合は、.Value