仅用于匹配未转义特殊字符的正则表达式
我正在尝试提出一个正则表达式,该表达式只能匹配字符串中不具有特殊转义序列的字符。
例如,在字符串中,我希望能够用另一个字符串替换尚未转义的哪个,所以我可以得到这个结果:Is ? stranded//?
?
**Is Dave stranded?**
但是对于我的生活,我无法找到一种方法。我只想出了吃掉所有可替换字符的正则表达式。
如何构造仅匹配不带转义序列的字符的正则表达式?
我正在尝试提出一个正则表达式,该表达式只能匹配字符串中不具有特殊转义序列的字符。
例如,在字符串中,我希望能够用另一个字符串替换尚未转义的哪个,所以我可以得到这个结果:Is ? stranded//?
?
**Is Dave stranded?**
但是对于我的生活,我无法找到一种方法。我只想出了吃掉所有可替换字符的正则表达式。
如何构造仅匹配不带转义序列的字符的正则表达式?
使用负面的眼光,这就是他们被设计的目的!
(?<!//)[?]
要分解它:
(
?<! #The negative look behind. It will check that the following slashes do not exist.
// #The slashes you are trying to avoid.
)
[\?] #Your special charactor list.
仅当找不到 // 时,它将随着搜索的其余部分而进行。
我认为在Java中,它需要再次作为字符串转义,如下所示:
Pattern p = Pattern.compile("(?<!//)[\\?]");
试试这个Java代码:
str="Is ? stranded//?";
Pattern p = Pattern.compile("(?<!//)([?])");
m = p.matcher(str);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, m.group(1).replace("?", "Dave"));
}
m.appendTail(sb);
String s = sb.toString().replace("//", "");
System.out.println("Output: " + s);
Output: Is Dave stranded?