用RegEx替换时搜索周围的空格

时间:2013-04-24 13:56:12

标签: regex vbscript

我正在尝试替换。请考虑以下字符串:

Please replace something in this sentence.
and replace <b>something&nbsp;</b> in this sentence.
But not here http://www.mysite.com/something/mypage.html
Or here \\myserver\something\myshare\

我想将something替换为somethingelse,但something可以出现在我的源代码中的URL或UNC中,我不想替换它。我也有一些有趣的HTML。

这是我正在使用的模式:

\b[^/\\]Something[^/\\]\b

哪个有效,但我在第一个something周围也有空位。如果我将something替换为somethingelse,我会得到结果:

Please replacesomethingelsein this sentence.
and replace <b>somethingelse&nbsp;</b> in this sentence.
But not here http://www.mysite.com/something/mypage.html
Or here \\myserver\something\myshare\

第二个实例有效,第一个没有空格。

如何忽略something周围是否存在空格?谢谢。

2 个答案:

答案 0 :(得分:2)

你想要做的是使用后视和前瞻,所以你的正则表达式应该是这样的, \b(?<!/\\)something(?=[^/\\])\b

由于您在正则表达式中包含[^/\\],因此它实际上匹配“某事物”之前的字符,然后将其包含在您声明不需要的响应中。当您想要确认某些东西是否存在(向前或向后)并且没有实际匹配您验证的那些片段时,您可以使用前瞻和后视来处理该验证。有关前瞻和后视的更多信息,我使用this作为参考。

您可以看到我做过的测试here with your example you provided.

编辑:Look-behinds are not supported in VBScript,但似乎完全支持前瞻。由于正则表达式正在使用前后验证(这是多余的),因此它仍应仅使用正向前瞻(检查您概述的NOT条件):\bsomething(?=[^\/\\])\b

答案 1 :(得分:2)

http://msdn.microsoft.com/en-us/library/k9z80300(v=vs.84).aspx

所以:

ReplaceTest("\b([^/\\])Something([^/\\])\b", "$1SomethingElse$2")

注意:未包含不区分大小写的搜索。