0

我试图在下面的例子@@BOKeyword-中匹配最里面的内容:-End@@

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

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

但是,这根本不匹配。我基于这个例子开发了这个,这个例子是我从上一个问题的答案中得出的:

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 中运行它。

4

1 回答 1

1

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

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

有 2 种情况未涵盖(两者之间只有一个/零字符):

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

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

  • {用/ }(或其他单个字符对)替换您的分隔符
  • 写一个更简单的正则表达式来匹配
于 2012-11-06T23:49:47.430 回答