【发布时间】:2020-12-30 15:40:04
【问题描述】:
对于输入字符串 id,我想做如下 4 个步骤:
- 删除所有非小写字母、数字、“-”、“_”、“.”
- 如果“.”是多个连续的,将其替换为单个“。” (例如:他......llo -> he.llo)
- 如果字符串以“.”开头,请将其删除。
- 如果字符串以“.”结尾,请将其删除。
这是我的代码的 4 行:
id = id.replaceAll("[^" + "a-z" + "0-9" + "-" + "_" + "." + "]", "");
id = id.replaceAll(".{2,}",".");
id = id.replaceAll("^.","");
id = id.replaceAll(".$","");
我发现规则 2 的返回将是“。” (例如:他...llo -> 。) 规则 3,4 将删除不是“.”的字符串
所以我修复了如下代码:
id = id.replaceAll("[^" + "a-z" + "0-9" + "-" + "_" + "." + "]", "");
id = id.replaceAll("\\.{2,}",".");
id = id.replaceAll("\\^.","");
id = id.replaceAll("\\.$","");
而且效果很好。 我只是不明白。该正则表达式是否需要在使用前添加两次“\”? 如果它是正确的,为什么规则 1 工作得很好?谁能给我具体的正确答案? 最后,我想知道我可以同时编码规则 3 和规则 4 吗?喜欢使用 && 吗?
【问题讨论】:
-
.在正则表达式的上下文中具有特殊含义。因此,如果我们想匹配文字点,我们必须对其进行转义。单个反斜杠是不够的,因为这是 java 字符串的转义字符,我们需要正则表达式中的文字反斜杠-String,我们可以使用\`. Same goes for^` 和$获得。 --- 备注:我想id = id.replaceAll("\\^.","");应该是id = id.replaceAll("^\\.","");
标签: java regex replaceall