2012-11-06 27 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

相关问题