Java正则表达式之前的所有内容,包括匹配
我需要正则表达式来删除匹配之前的任何文本,并包括匹配 我想删除“123S”及其之前的所有内容,我知道我可以用它来完成Java正则表达式之前的所有内容,包括匹配,java,regex,Java,Regex,我需要正则表达式来删除匹配之前的任何文本,并包括匹配 我想删除“123S”及其之前的所有内容,我知道我可以用它来完成 string.replaceAll("^.*?(?=[123S])",""); string.replaceAll("123S",""); 但是真的想在一个表达式中实现它(在任何地方都找不到其他示例!) 更高效,更清晰,让其他人知道你在做什么。你可以使用以下工具: string.replaceAll("^.*123S",""); 删除非贪婪的?以匹配上一次出现
string.replaceAll("^.*?(?=[123S])","");
string.replaceAll("123S","");
但是真的想在一个表达式中实现它(在任何地方都找不到其他示例!)
更高效,更清晰,让其他人知道你在做什么。你可以使用以下工具:
string.replaceAll("^.*123S","");
删除非贪婪的?
以匹配上一次出现和*
之前的所有内容
string.replaceAll("^.*?123S", "");
(?=
是您不想要的“if follower by”模式,[123S]甚至不正确,例如,它只捕捉“2”。您不需要向前看:
"abc123Sdef123Sxyz".replaceAll("^.*?123S","");
如果您需要的话,这将仅替换第一次出现(输出为defs123sxyz
)
如果要替换到最后的123S,只需删除?
修改器:
"abc123Sdef123Sxyz".replaceAll("^.*123S","");
输出是
xyz
我看不出这种方法有任何性能提升,也不能真正回答问题。问题不清楚,但他可能真的想要。*?这样他就可以找到第一个匹配,而不是最后一个。
"abc123Sdef123Sxyz".replaceAll("^.*123S","");