请告诉我,我的要求是什么样的正确模式。
我有一个字符串,我想找到特定模式之间的字符串。我有到目前为止尝试的代码,但无法获得预期的结果。
输入字符串
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
提前致谢!!
答案 0 :(得分:5)
使用非贪婪(懒惰)方式
更改:
X.*X
要:
X.*?X
或者更好地使用
X[^X]*+X
Negated Character Classes/Sets
在开始方括号后键入插入符号否定字符类。结果是字符类匹配任何不在字符类中的字符。
占有量词是防止正则表达式引擎尝试所有排列的一种方法。这主要是出于性能原因。
值得阅读✽ Want to Be Lazy? Think Twice.
的帖子然而,懒惰的量词有一个成本:在大括号内的每一步,引擎首先尝试延迟选项(匹配无字符),然后尝试匹配下一个标记(结束括号),然后必须回溯。
请参阅✽ A Time for Greed, a Time for Laziness.
一个不情愿(懒惰)的量词可以让你感到安全,因为你知道你不会吃掉比你需要的更多的角色并超越你的比赛