2012-11-06 26 views
0

我試圖匹配最內部在下面的示例@@BOKeyword-[email protected]@之間的內容:爲什麼這個正則表達式不像其他的那樣匹配?

@@BOKeyword-Here [email protected]@BOKeyword-I want to match [email protected]@[email protected]@ 

所以我的比賽將是:I want to match this!我使用以下正則表達式:@@BOKeyword-([^@@[email protected]@]*)[email protected]@

然而,這完全不符合。我開發了這個基於這個例子是我從a previous question's answer得出:

AC I want to match this! BD I don't want to match this! AC I want to match this! BD I don't want to match this! BD 

使用正則表達式:AC([^ACBD]*)BD

而這按預期工作。我想我誤解了這是如何工作的。任何提示將不勝感激!謝謝!

注:我在Java中運行此。

+0

'[]'組匹配(正或負)一個角色在一次。不是全部字符串。所以'[^ ABCD]'實際上是指不是A,B,C或D的單個字符。 – climbage

回答

1

如果您正則表達式引擎支持lookaround,你可以試試這個:

(?<[email protected]@BOKeyword-).((?<[email protected]@BOKeyword-).([email protected]@))*.([email protected]@) 
  • 第一DOT比賽開始字符:I
  • 中間DOT匹配字符,而不是你的分隔符包圍:·want·to·match·this
  • 最後DOT匹配結束字符:!

有2例不包括(以之間只有一個/零字符):

(?<[email protected]@BOKeyword-).?([email protected]@) 

這是相當困難的這兩個正則表達式相結合。另一種方法是:

  • 與替換您定界符{/}(或其他單個字符對)
  • 寫一個更簡單的正則表達式匹配
+0

工作!萬分感謝!我會盡可能地接受它。 – kentcdodds

相關問題