Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex VBA检查字符串与单词完全匹配_Regex_Vba - Fatal编程技术网

Regex VBA检查字符串与单词完全匹配

Regex VBA检查字符串与单词完全匹配,regex,vba,Regex,Vba,我使用下面的代码检查字符串是否与模式匹配 Sub chkPattern(str As String, pattern As String) Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") objRegex.pattern = pattern MsgBox objRegex.test(str) End Sub 具体来说,我想检查字符串是否匹配整个字符串“abc”或“x

我使用下面的代码检查字符串是否与模式匹配

Sub chkPattern(str As String, pattern As String) 

    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    objRegex.pattern = pattern
    MsgBox objRegex.test(str)

End Sub
具体来说,我想检查字符串是否匹配整个字符串
“abc”或“xy”的“cde”

例如,如果输入是“abccde”或“abcxy”或“abccdexyz”,我希望它将返回false

我已经尝试过的一些模式,如:“abc | cde | xyz”、“\b(abc | cde | xyz)\b)”不起作用


这可以在VBA中通过使用正则表达式来实现吗?

\babc\b |\bcde\b |\bxy\b应适用于“abc”或“cde”或“xy”,但不适用于其他变体。

以匹配整个单词的使用

(\w+)

(\w+)
捕获组

\w+
匹配任何单词字符
(等于[a-zA-Z0-9])

+
量词-在一次和无限次之间尽可能多地匹配


有可能是的。在我阅读您的问题时,您希望将
与管道字符一起应用

Sub Test()

Dim arr As Variant: arr = Array("abc", "cde", "xy")

With CreateObject("VBScript.RegExp")
    .Pattern = "^(" & Join(arr, "|") & ")$"
    Debug.Print .Test("abcd") 'Will return False
    Debug.Print .Test("abc") 'Will return True
End With

End Sub
这里匹配整个字符串的键是开始字符串ancor
^
和结束字符串ancor
$
。如果您的意思是要测试部分匹配,那么您只需颠倒斜杠即可。使用反斜杠而不是正斜杠>
\b(abc | cde | xyz)\b
作为模式

请记住,如果要忽略大小写比较,请使用
.IgnoreCase=True



或者使用内置的
操作符,如
操作符。

告诉您要检查的字符串是什么?那么期望的结果是什么呢?是您尝试过的
\b(abc | cde | xyz)\b
还是您真的输入错误并将单词边界写为
/b
?对不起,我编辑为/b