通过Regexp从String中删除文本

时间:2015-12-04 08:12:41

标签: java regex

Java中的

我想通过Regexp从以下String中删除一些文本:

someText

begin
  .someMethod()
  .doSomething(TOKEN_123)
  .someMethod()
end

begin
  .someMethod()
  .doSomething(TOKEN_456)
  .someMethod()
end

begin
  .someMethod()
  .doSomething(TOKEN_789)
  .someMethod()
end

more Text

我想删除包含字符串TOKEN_456的第二个开始/结束块。

目前我的正则表达式如下所示

begin.*TOKEN_456(.*?)end

但是这个删除了第一个和第二个块。

有人可以帮忙吗?

格尔茨

1 个答案:

答案 0 :(得分:2)

您可以使用

str = str.replaceFirst("(?s)begin(?:(?!begin).)*TOKEN_456.*?end\\s*", ""));

请参阅IDEONE demoregex demo

正则表达式匹配:

  • (?s) - 单行修饰符
  • begin - 匹配前导边界,字符序列begin
  • (?:(?!begin).)* - 一个驯服的贪婪令牌,匹配任何未启动单词begin的文字
  • TOKEN_456 - 要匹配的文字字符序列
  • .*?end - 任意数量的任意字符尽可能少,最接近end
  • \\s* - 0个或更多空格(用于修剪)。