为什么这个正则表达式与其他正则表达不匹配?

时间:2012-11-06 23:42:38

标签: regex

我正在尝试匹配以下示例中@@BOKeyword--End@@之间的最内容:

@@BOKeyword-Here is@@BOKeyword-I want to match this!-End@@stuff-End@@

所以我的匹配是:I want to match this!我正在使用以下正则表达式:@@BOKeyword-([^@@BOKeyword--End@@]*)-End@@

然而,这根本不匹配。我根据这个例子开发了这个,这个例子来自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中运行它。

1 个答案:

答案 0 :(得分:1)

如果你的正则表达式引擎支持lookaround,你可以试试这个:

(?<=@@BOKeyword-).((?<!@@BOKeyword-).(?!-End@@))*.(?=-End@@)
  • 第一个DOT匹配开始字符:I
  • 中间DOT匹配未被分隔符包围的字符:·want·to·match·this
  • 最后DOT个匹配结束字符:!

有两种情况没有覆盖(中间只有一个/零字符):

(?<=@@BOKeyword-).?(?=-End@@)

将这两个正则表达式结合起来非常困难。另一种方式是:

  • 使用{ / }(或其他单字符对)替换您的分隔符
  • 编写一个更简单的正则表达式来匹配