我有一个字符串&#34; <li>test<ul></ul><li>test<ul><li>model<ul></ul><li>src<ul><li>org<ul>"
&#34;,我想删除模式&#34; <li>test<ul></ul>
&#34;从字符串。
所以我想要的输出将是&#34; <li>test<ul><li>src<ul><li>org<ul>
&#34;
我试过以下方式。
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);
}
}
但它没有奏效,我的输出为&#34; <li>src<ul><li>org<ul>
&#34;
答案 0 :(得分:1)
我不认为你非常了解RegEx的运作方式。
基本上,你的正则表达式在两部分上匹配:
<li>test<ul></ul>
和 <li>test<ul><li><model><ul></ul>.
因此只留下:<li>src<ul><li>org<ul>
如果您特意要删除模式<li>test<ul></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("<li>src<ul><li>org<ul>", "");
System.out.println(str);
}
}
答案 1 :(得分:1)
尝试此操作并替换为&#34;&#34;
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("<li>([^<]*)<ul><\\/ul>", "");
System.out.println(str);
}
编辑:
根据要求提供了以下解释:
reg引擎将开始匹配<li>
和<ul></ul>
之间的任何内容。 [^<]*
将确保没有&#34;&lt;&#34;在...之间签名,这使得它变得懒惰,也可以通过使用。*?。