Java 在组内捕获正则表达式
我希望能够删除Java 在组内捕获正则表达式,java,regex,Java,Regex,我希望能够删除标记内的所有换行符实例,但不能删除外部的换行符实例。例如: <p dir="ltr">Test<br>\nA\naa</p>\n<p dir="ltr">Bbb</p> 我希望这能起作用,但(?:(.*)\n*)*似乎引起了一些问题。有没有办法通过一个抓捕小组进行这样的重复匹配 提前谢谢 解决方案 您可以使用此正则表达式(在PCRE中工作,但在Java中不工作。有关Java版本,请参阅下面的) (?s)(?:有两个p标
标记内的所有换行符实例,但不能删除外部的换行符实例。例如:
<p dir="ltr">Test<br>\nA\naa</p>\n<p dir="ltr">Bbb</p>
我希望这能起作用,但(?:(.*)\n*)*
似乎引起了一些问题。有没有办法通过一个抓捕小组进行这样的重复匹配
提前谢谢 解决方案 您可以使用此正则表达式(在PCRE中工作,但在Java中不工作。有关Java版本,请参阅下面的)
(?s)(?:有两个p
标记?你想分别为它们删除\n
标记吗?分别为p
标记是可以的。只是我希望一次性替换p
标记中的所有\n
标记。我希望可以使用没有嵌套循环的正则表达式。我建议使用like JSoup做这种工作。@这个人说得通。谢谢。天哪……哇。这真是太神奇了。该死的regex noobness!干得好rock-我太慢了,不能成为救世主。@Jun首先让我用Java检查一下,我正要添加答案“(?s)\\n+(?=(?):(?!@rock321987您的模式更准确,如果有一个长html输入,并且有许多\n
在
(<p[^>]*?>)(?:(.*)\n*)*(.*)(</p[^>]*?>)
$1$2$3$4
(?s)(?:<p|\G(?!\A))(?:(?!<\/p>).)*?\K[\n\r]+
(?s) #Enable . to match newlines
(?:
<p #this part is to assure that whatever we find is inside <p tag
| #Alternation(OR)
\G(?!\A) #Find the position of starting of previous match.
)
(?:
(?!<\/p>). #Till it is impossible to match </p>, match .
)*? #Do it lazily
\K #Whatever is matched till now discard it
[\n\r]+ #Find \n or \r
String line = "<p dir=\"ltr\">Test<br>\nA\naa</p>\nabcd\n<p dir=\"ltr\">Bbb</p>";
System.out.println(line.replaceAll("(?s)((?:<p|\\G(?!\\A))(?:(?!<\\/p>).)*?)[\\n\\r]+", "$1"));