2010-10-14 257 views
0

我有一个字符串:正则表达式替换

users/554983490\/Another+Test+/Question????\/+dhjkfsdf/

我怎么会写一个正则表达式,将匹配所有的是斜杠不是由回斜线?

编辑:有没有办法做到这一点,而不使用负面lookbehinds?

+2

哪种语言是你使用您的RegExp?有许多口味... – gnarf 2010-10-14 20:11:14

+0

即使有向后看,你也无法可靠地做到这一点。但是,如果你告诉我们你想要完成什么,我们可能会提出一种不同的方法。 – 2010-10-15 00:06:43

回答

2

如果你的正则表达式支持negative lookbehinds

/(?<!\\)\// 

否则,你将需要的字符/以及之前匹配:

/(^|[^\\])\// 

这可以与除捕获组#()之外的任何非\[^\\])的字符串(^)或(|)之一匹配。然后它匹配文字/之后。无论角色是以前/将被存储在捕获组中$1所以你可以把它放回如果你正在做一个替代....

示例(JavaScript的):

'st/ri\\/ng'.replace(/(^|[^\\])\//, "$1\\/"); 
// returns "st\/ri\/ng" 
+0

是的,但是这包括之前的信 – 2010-10-14 20:21:28

+0

负面后顾之事不包括它......第二场比赛会,但如果你不支持负向后视,它是你唯一的选择......你可以做一些像' 'st/ri \\/ng'.replace(/(^ | [^ \\])\ //,“$ 1 \\ /”);'在javascript中加入反斜杠到任何'/'已经没有了。 – gnarf 2010-10-14 21:31:30

2

您可以使用此:

/(?<!\\)\// 

这就是所谓的negative lookbehind

我用/作为分隔符

(?<! <-- Start of the negative lookbehind (means that it should be preceded by the following pattern) 
    \\  <-- The \ character (escaped) 
)  <-- End of the negative lookbehind 
\/  <-- The/character (escaped)