我得到这样的字符串:
CSF @ asomedatahere @ iiwin @ hnotwhatIwant

我想替换@i和@h(h可以是任何字符)之间存在的字符串。这是我到目前为止所拥有的,我觉得我已经接近了,但是,在此@idata模式之后,可能并不总是有@CHAR。

 (?<=@i)(.*)(?=@.*)


我希望它可以选择性地不存在。在下面的链接中可以看到,它适用于第一种情况,不适用于第二种情况。我尝试添加“?”最后将最后一部分设为可选,但这不适用于第一种情况。

以下是一个链接,可以主动向您显示不起作用的内容:http://fiddle.re/vtvmc

最佳答案

您还需要扩展前瞻以使用输入的结尾:

(?<=@i)(.*?)(?=@.*|$)


这将匹配


iwin@hnotwhatIwant中的CSF@asomedatahere@iiwin@hnotwhatIwant
iwin@h中的CSF@asomedatahere@iiwin@h
iwin中的CSF@asomedatahere@iiwin

10-06 02:30