2011-02-09 11 views
6

私はVBsの正規表現オブジェクトを使って次のことをしようとしていましたが、簡単な方法を見つけることができませんでした。いくつかの提案を提供できる人はいますか?正規表現 - 試合内で試合を見つけるにはどうすればいいですか?

たとえば、私は文字列「12 < 56> 89」を持っています。この場合、「<>」内の文字列を取得したいと思います。現在私が行っているのは、< 56>を返す式 "< \ d +>"を探してみることです。次に、最初の一致の結果から "\ d +"という式を探して、56を返します。

関数を2回呼び出す必要があるため、この方法が嫌いです。私は "<"の中の文字列を得ることが可能かどうか疑問に思っています。ありがとうございました!

おかげで、 アレン

答えて

8

使用表現 "<(\ D +)>"

あなたは、コレクションとしてすべての一致をアクセスすることができます。 RegEx.Global = Trueを設定すると、正規表現が複数回一致する可能性があります。最初の一致はvar(0)にあり、2番目の一致はvar(1)にあります。ここ

Dim RegEx : Set RegEx = New RegExp 
RegEx.Pattern = "<(\d+)>" 
Dim strTemp : strTemp = "12<56>89" 
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(0) 

テストアウトあなたの正規表現を:: http://www.regular-expressions.info/vbscriptexample.html

部分マッチグループは、あなたが一度だけそれをやっている場合は、1行にそれをすることができます(0)などのVAR(0).SubMatchesで発見されています
+0

ありがとうございました。 グループ変数$ 1を返すにはどうすればよいですか? 私が実際にやろうとしているのは、2つの文字列の間の文字列を検索し、2つの境界文字列を結果から除外することです。 「(?<=<)\d+(?=>)」というルックアラウンド式は使用していませんが、動作していないようです。 これ以上の提案はありますか? ありがとう、 アレン – Allen

+0

ああ、申し訳ありません。私の答えはperlです。 vbscript –

+0

のために更新されました!助けてくれてありがとう、ジェフ。また、VBsの正規表現をテストするためのリンクを共有してくれてありがとう。 – Allen

3

式<(\ d +)>を使用します。

Set matches = expr.Execute(text) 
If matches.Count > 0 Then 
    result = matches(0).Submatches(0) 
End If 

Submatchesコレクションには、式のかっこのグループに対応する文字列が含まれています。

+0

あなたの助けてくれてありがとう、Tmdean。私はSubmatchesコレクションを使うことを考えなかった。これは完全に動作します! – Allen