我是一个正则表达式的新手。我有这个正则表达式:
\[(.*[^(\]|\[)].*)\]
基本上,它应该采取这个:
[[a][b][[c]]]
并能够替换为:
[dd[d]]
abc和d没有关联。不用说,正则表达式部分是不起作用的。在这种情况下,它将整个字符串替换为"d"。
任何解释或帮助都将是极好的!
编辑:
我尝试了另一个正则表达式,
\[([^\]]{0})\]
这个方法适用于括号内不包含其他括号和其他内容的情况,但对于描述的情况不起作用。
.
点是一个特殊字符,表示“除换行符之外的任何字符”,*
是贪婪的,因此它会尝试找到最大匹配。\[(.*[^(\]|\[)].*)\]
中,第一个.*
将表示[
和[^(\]|\[)].*)\]]
之间的最大字符集,这部分可以理解为非[
或]
字符、可选的其他字符.*
,最后是]
。因此,这个正则表达式将匹配你的整个输入。
.*
。此外,你不需要在[^...]
内使用|
或(
)
。System.out.println("[[a][b][[c]]]".replaceAll("\\[[^\\]\\[]\\]", "d"));
[dd[d]]
试试这个:
System.out.println("[[a][b][[c]]]".replaceAll("\\[[^]\\[]]", "d"));
System.out.println("[[a][b][[c]]]".replaceAll("\\[[^]\\[]++]", "d"));
[
和]
。字符类是:[^]\\[]
,模式中的其他方括号都是字面值。\[(\[a\])(\[b\])\[(\[c\])\]\]
\\[(\\[a\\])(\\[b\\])\\[(\\[c\\])\\]\\]
a
,b
和c
的示例替换是[^\]]*
,或者如果您需要转义反斜杠,则为[^\\]]*
。
现在,您可以将捕获一、捕获二和捕获三分别替换为d
。
(\[a\])
替换 a
,(\\[[^\\]]*\\])
替换
(\[[^\]]*\])
。
.*
。 - Pshemo