Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式:替换A和Z之间的任何B_Java_Regex - Fatal编程技术网

Java正则表达式:替换A和Z之间的任何B

Java正则表达式:替换A和Z之间的任何B,java,regex,Java,Regex,假设此输入字符串: A-B-C-B-Z 我正在尝试替换A和Z之间的任何B 以下正则表达式仅与上次出现的B匹配: (.*A.*)B(.*Z.*) …将(Pattern.replaceAll())替换为$1-$2时,结果是 A-B-C---Z 预期结果将是 A---C---Z 相反 谢谢你的帮助 在Java中,您可以像这样使用Lookaround: String str = "F-B-P-B-A-B-C-B-Z-D-B-A-B-C-B-Z-C"; String repl = str.repl

假设此输入字符串:

A-B-C-B-Z
我正在尝试替换
A
Z
之间的任何
B

以下正则表达式仅与上次出现的
B
匹配:

(.*A.*)B(.*Z.*)
…将(
Pattern.replaceAll()
)替换为
$1-$2
时,结果是

A-B-C---Z
预期结果将是

A---C---Z
相反


谢谢你的帮助

在Java中,您可以像这样使用Lookaround:

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 str=“F-B-P-B-A-B-C-B-Z-D-B-A-B-C-B-Z-C”;

字符串repl=str.replaceAll(“(?你必须遵循迭代的方法。@RohitJain你的意思是真正的迭代、缓冲、状态记忆和直接用Java代码替换,对吗?谢谢@anubhava。看起来很有希望,但在同一字符串内的多个
A..B..Z
序列中失败,例如
F-B-P-B-A-B-C-B-Z-D-B-A-B-B-C-C
转换为
F-B-P-B-A--C)---Z-D--A--C--Z-C
而它应该是
F-B-P-B-A--C--Z-D-B-A--C--Z-C
。当找到Z时,我可以在后面停下来吗?请注意,我当然没有真正使用
A
B
Z
。我真正做的是在替换
&CDATA(
B
)部分中的(
A
)和
]>
(=
Z
)…我建议您提供一些类似问题的示例,以便我可以向您推荐更好的正则表达式解决方案。我已更新了有关问题的答案,并尝试猜测您在评论中添加的问题的正则表达式。检查更新的正则表达式。非常感谢,现在可以完美地工作了!…承认我不知道这是如何工作的/我的想法是什么实现想法。阅读所用概念的一些提示将是完美的++。另一件事:
{0999}
对性能有什么影响?我的字符串可能更长。你认为
{010000000}
将使性能为零?将上面的
?=
更改为
?!
,但请不要从评论中添加新问题,因为不鼓励这样做。最好创建新问题。
String repl = str.replaceAll(
  "(?<=<!\\[CDATA\\[.{0,999})&amp;(?=((?!<!\\[CDATA\\[|\\]\\]>).)*\\]\\]>)", "-");