作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设这个输入字符串:
A-B-C-B-Z
我正在尝试替换 A
和 Z
之间的任何 B
。
以下正则表达式仅匹配最后一次出现的 B
:
(.*A.*)B(.*Z.*)
...当用 $1-$2
替换 (Pattern.replaceAll()
) 时,结果是
A-B-C---Z
预期的结果是
A---C---Z
相反。
感谢您的帮助!
最佳答案
在 Java 中,您可以像这样使用环视:
String str = "F-B-P-B-A-B-C-B-Z-D-B-A-B-C-B-Z-C";
String repl = str.replaceAll("(?<=A.{0,999})B(?=((?!A|Z).)*Z)", "-");
//=> F-B-P-B-A---C---Z-D-B-A---C---Z-C
根据您的评论,您可以使用此正则表达式:
String repl = str.replaceAll(
"(?<=<!\\[CDATA\\[.{0,999})&(?=((?!<!\\[CDATA\\[|\\]\\]>).)*\\]\\]>)", "-");
请注意,这是假设您的输入长度最大为 999。
关于Java 正则表达式 : replace any B between A and Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791957/
我是一名优秀的程序员,十分优秀!