2013-04-24 42 views
0

我正在尝试执行替换。请看下面的字符串:更换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 \\myserver\something\myshare\ 

我想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 \\myserver\something\myshare\ 

二审工作,先用空间没有。

如何忽略something附近是否存在空格?谢谢。

+0

难道你不能让他们捕获组,并在替换中使用它们吗? – Loamhoof 2013-04-24 14:01:11

+0

我试过'\ b [^/\\](Something)[^/\\] \ b',但不知道如何替换SubMatch。那是你在想什么? – SLeepdepD 2013-04-24 14:04:55

+0

查看我的答案:) – Loamhoof 2013-04-24 14:18:13

回答

2

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

所以:

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

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

+0

我验证了这个作品。你们两个都有正确的解决方案 - 不确定哪个标记为答案:) – SLeepdepD 2013-04-24 14:21:22

+1

@SLeepdepD我认为Loamhoof的答案更具体到VB,而我的更通用。我可能会帮助那些非VB问题的人类似于你的问题。我想标记Loamhoof,因为它更接近原来的布局。 :) – Walls 2013-04-24 14:23:17

+0

@墙壁非常亲切:)谢谢你们两位的帮助 – SLeepdepD 2013-04-24 14:25:37

2

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

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

你可以看到我做的测试here with your example you provided.。编辑:Look-behinds are not supported in VBScript,但似乎预见充分支持。由于正则表达式使用前后验证(这是多余的),所以它应该仍然只能使用正面预测(检查你所描述的NOT条件):\bsomething(?=[^\/\\])\b

+0

我认为'vbscript'不支持它们。 – Loamhoof 2013-04-24 14:09:33

+0

@Loamhoof,这是正确的。任何其他想法Walls? – SLeepdepD 2013-04-24 14:11:25

+0

@SLeepdepD我发现一些说明文档不支持,但是预览完全受支持。我编辑了回应并添加了一个链接到该发现。前瞻应该还是够用的。前瞻是一种“积极”的展望,与“负面”相匹配。在VB中,“积极”预见应该起作用。 – Walls 2013-04-24 14:15:34