如何在java中使用regex/pattern删除标记
我有一个字符串“<li>test<ul></ul><li>test<ul><li>model<ul></ul><li>src<ul><li>org<ul>"
”,我想从字符串中删除模式“<li>test<ul></ul>
”。
所以我想要的输出是“<li>test<ul><li>src<ul><li>org<ul>
”
我试过这样做
public class Test {
public static void main(String[] args) {
String str = "<li>test<ul></ul><li>test<ul><li>model<ul></ul><li>src<ul><li>org<ul>";
str = str.replaceAll("(?s)<li>.*?<ul></ul>", "");
System.out.println(str);
}
}
但它不起作用,我得到的输出是“<li>src<ul><li>org<ul>
”
# 1 楼答案
我认为您不太了解正则表达式是如何工作的
看看这里:http://regexr.com/3ebpv
基本上,您的正则表达式在两个部分上是匹配的:
<li>test<ul></ul>
和<li>test<ul><li><model><ul></ul>.
因此只剩下:
<li>src<ul><li>org<ul>
如果您特别想删除模式
<li>test<ul></ul>
, 那你为什么不用它来代替呢?这不是正则表达式,而是要查找和替换的精确字符串。对于一个简单的问题,你想得太多了这就足够了,不是吗
# 2 楼答案
尝试此操作并替换为“”
编辑:
以下是所要求的解释: reg引擎将开始匹配
<li>
和<ul></ul>
之间的任何内容[^<]*
将确保没有“<;”在…之间登录。。。这使得它有点懒惰,这也可以通过使用。*?来实现