vba正则表达式匹配 报错“运行时错误 5017”
Sub test()
Dim regEx, Match, matches ' 建立变量。
Set regEx = CreateObject("vbscript.regexp") ' 建立正则表达式。
regEx.Pattern = "(?<![\u4e00-\u9fa5])张三(?![\u4e00-\u9fa5])" ' 报运行时错误 5017
'regEx.Pattern = "张三" '不会报错
regEx.IgnoreCase = True ' 设置是否区分字符大小写。
regEx.Global = True ' 设置全局可用性。
regEx.MultiLine = True '设置多行匹配
strng = "6. a张三(1) ,我不是 张三丰" '只匹配第一个张三,不匹配张三丰那个张三
Set matches = regEx.Execute(strng) ' 执行搜索。
End Sub
我想匹配“张三”这个名字,但是名字之间有空格,标点符号,数字等分割。我写了正则表达式匹配 "(?<![\u4e00-\u9fa5])张三(?![\u4e00-\u9fa5])",这个表达式我在线测试网站https://c.runoob.com/front-end/854/ 可以通过,但是在vba中报错。请问有什么解决办法。
VBA正则表达式不支持(?<=...)和(?<!...)
你是要 "张三" 前后不能有别的中文改成这样即可
regEx.Pattern = "\b张三\b"
vba兼容性不好
可以替换此图案的所有引用:
^[^0-9+-]+|([+-])[^0-9]+|([0-9])[^0-9.]+
with
$1$2
请看regex演示。
与VBA正则表达式引擎不支持的lookbehind((?<=...))不同,您可以使用捕获组,并通过对捕获值的反向引用恢复结果中捕获的文本。
斜杠之类的需要转义字符吧。