0

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

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\

我想替换somethingsomethingelse,但是something可以出现在我的源代码中的 URL 或 UNC 中,我不想替换它。我还有一些有趣的 HTML 正在进行。

这是我正在使用的模式:

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

哪个有效,但是我也得到了第一个something后面的空间。如果我替换somethingsomethingelse我得到的结果:

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?谢谢你。

4

2 回答 2

2

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

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

您可以使用您提供的示例查看我在此处所做的测试。.

编辑:VBScript 不支持look-behinds,但似乎完全支持look-aheads。由于正则表达式使用前后验证(这是多余的),它仍然应该只使用积极的前瞻(检查您概述的 NOT 条件)\bsomething(?=[^\/\\])\b:.

于 2013-04-24T14:05:27.260 回答
2

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

所以:

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

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

于 2013-04-24T14:13:38.307 回答