我正在尝试替换。请考虑以下字符串:
Please replace something in this sentence.
and replace <b>something </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 </b> in this sentence.
But not here http://www.mysite.com/something/mypage.html
Or here \\myserver\something\myshare\
第二个实例有效,第一个没有空格。
如何忽略something
周围是否存在空格?谢谢。
答案 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")
注意:未包含不区分大小写的搜索。