Java 字符串上的Regex replaceAll
假设我有一个字符串: asdf/dfa/fds?adsf 我希望能够得到字符串:asdf?adsf 所以本质上我想解析出从第一个“/”到“?”的所有内容 我尝试过使用它(见下面的示例),但无法让它工作:Java 字符串上的Regex replaceAll,java,regex,Java,Regex,假设我有一个字符串: asdf/dfa/fds?adsf 我希望能够得到字符串:asdf?adsf 所以本质上我想解析出从第一个“/”到“?”的所有内容 我尝试过使用它(见下面的示例),但无法让它工作: s = s.replaceAll("\\/([?]*)", ""); 试试这个 String s = "asdf/dfa/fds?adsf".replaceAll("/.*(?=\\?)", ""); 试试这个 String s = "asdf/dfa/fds?adsf".replaceAl
s = s.replaceAll("\\/([?]*)", "");
试试这个
String s = "asdf/dfa/fds?adsf".replaceAll("/.*(?=\\?)", "");
试试这个
String s = "asdf/dfa/fds?adsf".replaceAll("/.*(?=\\?)", "");
这应该能奏效
replaceAll("/[^?]*", "")
/[^?]*
将首先匹配/
,然后匹配所有非-?
字符。这应该可以解决问题
replaceAll("/[^?]*", "")
/[^?]*
将首先匹配/
,然后匹配所有非-?
字符。您应该将其更改为:
s = s.replaceAll("/.*(?=\\?)", "");
(?=\\?)
是一种前瞻,意思是“下一个字符是文字?
”。(仅供参考,?
在正则表达式中具有特殊含义。)
但是,您没有提到如果存在多个
?
,会发生什么情况。上面的正则表达式将匹配到最后一个
如果你想比赛到第一场
s = s.replaceAll("/.*?(?=\\?)", "");
额外的
?
会导致重复匹配“不情愿”。您应该将其更改为:
s = s.replaceAll("/.*(?=\\?)", "");
(?=\\?)
是一种前瞻,意思是“下一个字符是文字?
”。(仅供参考,?
在正则表达式中具有特殊含义。)
但是,您没有提到如果存在多个
?
,会发生什么情况。上面的正则表达式将匹配到最后一个
如果你想比赛到第一场
s = s.replaceAll("/.*?(?=\\?)", "");
额外的
?
会导致重复匹配“不情愿”。谢谢您的解释。@user1413969没问题:)谢谢您的解释。@user1413969没问题:)您不需要逃避/
,所以在/
之前不需要\
。此外,OP输入似乎是链接,因此其中不会有第二个?
,但我喜欢你在回答中包含这种可能性的方式:)@Pshemo:“似乎”。我想是吧?你不需要逃避/
,所以在/
之前不需要\
。此外,OP输入似乎是链接,因此其中不会有第二个?
,但我喜欢你在回答中包含这种可能性的方式:)@Pshemo:“似乎”。我想是吧?