2014-09-30 24 views
0

我正在尋找匹配前面沒有"]: ""("的字符串。首先,我嘗試使用向後看語法的同時的標準只有一個,它的工作原理:負面後視中的替代品

/(?<!\]:)\b(.+)/i 

/(?<!\()\b(.+)/i 

然後,當我嘗試使用或語法兩個標準的結合向後看,它打破:

/(?<!(\]: |\())\b(.+)/i 

我得到一個錯誤說:

RegexpError: invalid pattern in look-behind 

有沒有像Regexp.union需要一個字符串匹配所有表達式什麼?任何建議將不勝感激。

+3

任何問題'(?<!\()(?<!\]:)\ b(。+)'? – 2014-09-30 22:17:41

+0

@Rawing - 謝謝!它認爲它正在工作,但我需要添加更多的測試來確認。我不知道後視可以鏈接,但它總是有意義的。 – 2014-09-30 22:22:01

+0

@Rawing - 你應該發表你的評論作爲答案。 – 2014-09-30 22:31:30

回答

1

您可以使用兩個連續lookbehinds這樣的:

(?<!\()(?<!\]:)\b(.+) 
+0

我喜歡這個答案,因爲它對我能夠鏈接它們更具可讀性。 – 2014-10-01 22:04:04

0

Oniguruma manual

(?<=subexp)  look-behind 
(?<!subexp)  negative look-behind 

        Subexp of look-behind must be fixed character length. 
        [D]ifferent character length is allowed in top level 
        alternatives only. 
        ex. (?<=a|bc) is OK. (?<=aaa(?:b|cd)) is not allowed. 

        In negative-look-behind, captured group isn't allowed, 
        but shy group(?:) is allowed. 

所以只是一個害羞組替換捕獲組:

/(?<!(?:\]: |\())\b(.+)/i 
+2

我發現這個答案沒有錯。爲什麼downvote? – nhahtdh 2014-10-01 05:08:42