[英]Regular expression replace characters by a given match between strings
我正在尝试用正则表达式匹配替换给定的字符。 例如,给定以下字符串:
如果你看看你在生活中拥有什么,你总会拥有更多。 如果你看看你生活中没有的东西,你永远不会有足够的
我想用“。”替换所有“t”。 仅在字符 'ok' 和 'fe' 之间匹配。
我用这个正则表达式得到了 'ok' 和 'fe' 之间的匹配:
(?<=ok).*?(?=fe)
而且我只能将一个字符与以下正则表达式匹配:
(?<=ok).*?(t).*?(?=fe)
我尝试通过以下方式转换该正则表达式,但它不起作用:
(?<=ok).*?((t).*?)*?(?=fe)
如何匹配“ok”和“fe”之间的所有“t”? https://regex101.com/r/ORgseA/1
您可以使用
String result = text.replaceAll("(?s)(\\G(?!\\A)|ok)((?:(?!ok|fe|t).)*)t(?=(?:(?!ok|fe).)*fe)", "$1$2!");
String text = "If you look at what you have in life, you'll always have more. If you look at what you don't have in life, you'll never have enough";
String result = text.replaceAll("(?s)(\\G(?!\\A)|ok)((?:(?!ok|fe|t).)*)t(?=(?:(?!ok|fe).)*fe)", "$1$2!");
System.out.println(result);
// => If you look a! wha! you have in life, you'll always have more. If you look a! wha! you don'! have in life, you'll never have enough
详情:
(?s)
- Pattern.DOTALL
嵌入标志选项(使.
匹配换行符)(\G(?!\A)|ok)
- 第 1 组 ( $1
): ok
或上一场成功比赛的结束((?:(?.ok|fe|t).)*)
- 第 2 组 ( $2
): 任何一个字符,零次或多次出现,尽可能多,不启动ok
、 fe
或t
字符序列t
- 一个t
字符(?=(?:(?.ok|fe).)*fe)
- 紧靠右边,必须有任何单个字符,零次或多次出现,尽可能多,不开始ok
或fe
字符序列然后是一个fe
substring。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.