我应该先声明我正在使用 VB6 和 RegExp
我正在尝试查找和替换整个单词,“整个单词”是指有效匹配不是另一个单词的子字符串,尽管一些特殊字符可以。我是正则表达式的新手。这就是我正在尝试的:
([^a-z]+)(Foo)([^a-z]+)
看起来很接近,但在某些情况下我遇到了一些麻烦。
例如,如果我找到字符串
Foo Foo
或者
Foo(Foo)
或任何以 Foo 结尾的行且以下行以 Foo 开头的任何地方
This is a line with Foo
Foo starts the next line
在任何这些情况下,只有第一个 Foo 匹配。
好吧,也许这不是比赛的问题,而是我的替换方法。我不知道如何验证这一点。我正在使用组来替换表达式匹配的任何边界字符,如下所示:
regEX.Replace(source, "$1" & newstring & "$3")
所以总而言之,我想避免匹配: FooBar BarFoo
以下任何一项都是有效的匹配项:
Foo Foo
Foo Bar
Foo_bar
Foo.bar
Foo, bar
Foo(bar)
Foo(Foo)
如果有人能告诉我正确的方法来做到这一点,我将不胜感激!
已编辑
看起来我对下面的第一个解决方案说得太早了。经过一些测试和进一步阅读,我看到下划线是一个单词 char,因此上述模式与它不匹配。我想出了这个诀窍,有没有更好的方法?
(\b)(Foo)(\b|_)
regEX.Replace(source, "$1" & newstring & "$3")
它有效,但似乎有点草率。