如果我有一个带有捕获组的正则表达式,例如foo(_+f)
。如果我将其与字符串匹配并想要替换第一个捕获组在所有比赛中 with baz
so that
foo___f blah foo________f
转换为:
foobaz blah foobaz
使用标准库似乎没有任何简单的方法可以做到这一点。如果我使用Matcher.replaceAll() http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Matcher.html#replaceAll(java.lang.String)这将替换整个模式的所有匹配并将字符串转换为
baz blah baz
显然我可以迭代匹配,存储每个捕获组的开始和结束索引,然后返回并替换它们,但是有更简单的方法吗?
谢谢,
大学教师
我想你想要这样的东西吗?
System.out.println(
"foo__f blah foo___f boo___f".replaceAll("(?<=foo)_+f", "baz")
); // prints "foobaz blah foobaz boo___f"
在这里,您只需将整个匹配替换为"baz"
,但是匹配使用lookbehind来确保_+f
前面是foo
.
See also
- 正则表达式.info/Lookarounds http://www.regular-expressions.info/lookaround.html
如果向后查找是不可能的(可能是因为长度不是有限的),那么只需捕获您不替换的内容,然后在替换字符串中引用它们即可。
System.out.println(
"fooooo_f boooo_f xxx_f".replaceAll("(fo+|bo+)(_+f)", "$1baz")
); // prints "fooooobaz boooobaz xxx_f"
所以在这里我们实际上只是替换了\2
火柴。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)