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



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

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 \myserversomethingmyshare

我想用somethingelse替换something,但是something可以出现在我的源中的URL或UNC中,我不想替换它。我还写了一些有趣的HTML

这是我使用的模式:

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

这是有效的,但是我也得到了第一个something周围的空间。如果我用somethingelse替换something,我会得到结果:

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 \myserversomethingmyshare

第二个实例可以工作,第一个带有空格的实例不能。

如何忽略something周围空格的存在或不存在?谢谢你。

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

:

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

注意:没有包含不区分大小写的搜索

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

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

你可以看到我在这里用你提供的例子做的测试。

编辑:在VBScript中不支持向后查找,但似乎完全支持向后查找。由于regex正在使用前后验证(这是冗余的),因此仅使用正向前瞻性(检查您概述的NOT条件)仍然可以工作:bsomething(?=[^/\])b .

最新更新