java - 字符串上的正则表达式replaceAll

标签 java regex

假设我有一个字符串:

asdf/dfa/fds?adsf

我希望能够获取字符串:asdf?adsf

所以本质上我想解析从第一个“/”到“?”的所有内容。

我尝试用它进行实验(参见下面的示例),但我无法让它工作:

s = s.replaceAll("\\/([?]*)", "");

最佳答案

您应该将其更改为:

s = s.replaceAll("/.*(?=\\?)", "");

(?=\\?) 是一个前瞻,表示“下一个字符是文字​​ ?”。 (仅供引用,未转义, ? 在正则表达式中具有特殊含义。)


但是,您没有提到如果有多个 会发生什么?。上面的正则表达式将匹配到最后一个。

如果你想匹配到第一个,

s = s.replaceAll("/.*?(?=\\?)", "");

多余的?导致重复匹配变得“不情愿”。

关于java - 字符串上的正则表达式replaceAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266952/

相关文章:

java - 如何设置 Jackson 反序列化以将 Base64 编码的字符串转换为 Controller 内的对象

java - 为什么会出现数组索引越界异常?

regex - 伊朗邮政编码验证

regex - 对可选捕获子表达式的模式反向引用

javascript - 将字母尽可能移到最右边

java - 使用 <g :id> using JAXB 等元素解析 XML 文档

java - 如何将java对象序列化为field.path = field.value

java - Java 中的正则表达式 - 解析字符串数组

r - 如何删除带有特殊字符的行?

javascript - 为什么正则表达式在 Javascript 中使用 'match' 两次获取值?