我需要正则表达式来删除匹配前的任何文本并包含匹配
例如。我想删除“123S”及其前面的所有内容,我知道我可以用
执行此操作 string.replaceAll("^.*?(?=[123S])","");
string.replaceAll("123S","");
但是真的想在一个表达式中做到这一点(在任何地方找不到另一个例子!)
答案 0 :(得分:4)
你可以用:
string.replaceAll("^.*123S","");
删除非贪婪的?
以匹配上次发生的事件和.*
之前的一切。
答案 1 :(得分:4)
你不需要展望未来:
"abc123Sdef123Sxyz".replaceAll("^.*?123S","");
如果您需要(输出为def123Sxyz
),则仅替换第一个出现。
如果您想要替换最后的123S,只需删除?
修饰符:
"abc123Sdef123Sxyz".replaceAll("^.*123S","");
输出为xyz
。
答案 2 :(得分:2)
string.replaceAll("^.*?123S", "");
(?=
是您不想要的“if follow by”模式,[123S]甚至不正确,例如它只会捕获'2'。
答案 3 :(得分:0)
string.replaceAll("^.*?123S","");
提高效率并提高清晰度,让别人知道你在做什么。