【发布时间】:2017-03-27 20:02:59
【问题描述】:
在 VBA 中使用正则表达式(Microsoft VBScript 正则表达式 5.5)时,我经常发现自己在寻找几个单词中的一个作为更大模式的一部分。我通常的做法是在每个单词周围使用括号,用竖线| OR 运算符分隔。
例如:((mitt)|(bat)|(ball)|(mask))
整个组的最后一组括号让我找出匹配的单词。内括号是让 OR 作用于每个完整的单词,而不仅仅是单词的第一个/最后一个字母。
但是,我最终得到了一堆毫无价值的子匹配——括号中的每个单词都有一个。有没有更好的方法来为 OR 运算符分组“单词”?
【问题讨论】:
-
我对 vba 没有太多经验,但您根本不需要内括号。
|拆分外括号的内容。如果您愿意,可以将?:添加到每个括号组的开头,以免在匹配结果中捕获该组。 -
外部组可以是可选的,或者内部组可以被删除——这完全取决于你的需要。
-
感谢玛丽和维克托。 Marie,Microsoft 的实现是否支持 ?: 构造?根据我正在查看的文档,事实并非如此。但我可能会遗漏一些东西......
-
ECMAScript 正则表达式支持非捕获组。
-
实际上,VBScript 正则表达式 5.5确实 支持非捕获组 (?:) 和前瞻/负前瞻等功能。我查看的文档不是旧的就是不完整的。