我想通过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
但是这个删除了第一个和第二个块。
有人可以帮忙吗?
格尔茨
答案 0 :(得分:2)
您可以使用
str = str.replaceFirst("(?s)begin(?:(?!begin).)*TOKEN_456.*?end\\s*", ""));
正则表达式匹配:
(?s)
- 单行修饰符begin
- 匹配前导边界,字符序列begin
(?:(?!begin).)*
- 一个驯服的贪婪令牌,匹配任何未启动单词begin
的文字TOKEN_456
- 要匹配的文字字符序列.*?end
- 任意数量的任意字符尽可能少,最接近end
\\s*
- 0个或更多空格(用于修剪)。