2010-10-14 429 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)