使用RegEx我的要求的正确模式是什么

时间:2014-08-19 19:17:52

标签: regex excel excel-vba vba

请告诉我,我的要求是什么样的正确模式。

我有一个字符串,我想找到特定模式之间的字符串。我有到目前为止尝试的代码,但无法获得预期的结果。

输入字符串

ssdfsfssXf1sddfsXfsdaf578ds0Xafds1dsfXdafspfsfsfsfds

预期结果

Xf1sddfsX

Xafds1dsfX  

实际结果

Xf1sddfsXfsdaf578ds0Xafds1dsfX  

VB代码

Sub RegEx_Tester()

Dim objRegExp As RegExp
   Dim objMatch As Match
   Dim colMatches   As MatchCollection
   Dim RetStr As String
   ' Create a regular expression object.
   Set objRegExp = New RegExp

   'Set the pattern by using the Pattern property.

   objRegExp.Pattern = "X.*X"

   ' Set Case Insensitivity
   objRegExp.IgnoreCase = True

   'Set global applicability.
   MyString = "ssdfsfssdXf1sddfsXfsdaf578ds0Xafds1dsfXdafspfsfsfsfds"
   objRegExp.Global = True
   Set colMatches = objRegExp.Execute(MyString)  ' Execute search.

    For Each objMatch In colMatches   ' Iterate Matches collection.
            Debug.Print objMatch.Value 
    Next
End Sub

提前致谢!!

1 个答案:

答案 0 :(得分:5)

使用非贪婪(懒惰)方式

更改:

X.*X

要:

X.*?X

Online demo


或者更好地使用

X[^X]*+X

Negated Character Classes/Sets

  

在开始方括号后键入插入符号否定字符类。结果是字符类匹配任何不在字符类中的字符。

Possessive Quantifiers

  

占有量词是防止正则表达式引擎尝试所有排列的一种方法。这主要是出于性能原因。


值得阅读✽ Want to Be Lazy? Think Twice.

的帖子
  

然而,懒惰的量词有一个成本:在大括号内的每一步,引擎首先尝试延迟选项(匹配无字符),然后尝试匹配下一个标记(结束括号),然后必须回溯。

请参阅✽ A Time for Greed, a Time for Laziness.

  

一个不情愿(懒惰)的量词可以让你感到安全,因为你知道你不会吃掉比你需要的更多的角色并超越你的比赛