如何使用正则表达式将字符串的一部分从一个单词删除到另一个单词?
例如,我有一个像
这样的字符串String s = "<html><body> this is test </body></html>"
在上面的字符串中,我必须将部分从起始<body>
标记移除到结束</body>
标记,并且中间的值将动态确定,输出应为{{1} }。
答案 0 :(得分:2)
除非我在这里遗漏了什么,否则你可以使用:
s = s.replaceFirst("<body>.+</body>", "");
当然,在您的示例中,您也可以使用
s = s.substring(0, 6) + s.substring(s.length() - 7, s.length());
避免昂贵的正则表达式。
答案 1 :(得分:0)
如果您在编辑HTML或更好的XHTML和/或XML之后使用DOM。尝试使用正则表达式来做这件事并不是一个好主意。
如果您有/想要使用正则表达式:
如果您要从HERE
移至THERE
,您是否考虑过像HERE A HERE B THERE C THERE
这样的案例?简单的非贪婪匹配不会表现为“预期”将内部HERE移除到那里,但会导致C THERE
。
基本上你要做的就是找到THERE
,然后转到左边找到第一个HERE
所以s/(.*)HERE.*?THERE/\1/
(使用PCRE语法)应该做的伎俩并离开{{ 1}}。重复以摆脱它。但是,这不适用于替换所有实例的全局替换。对于这样的用例,请使用算法:
HERE A C THERE