[英]How to extract a substring which is repeated from a long string using regex
[英]How to exclude occurrence of a substring from a string using regex?
我在下面两个forms中有一个字符串输入。
1.
<!--XYZdfdjf., 15456, hdfv.4002-->
<!DOCTYPE
2.
<!--XYZdfdjf., 15456, hdfv.4002
<!DOCTYPE
如果遇到表单 2 并且不匹配表单 1,我想返回一个匹配项。因此,基本上我想要一个正则表达式,它可以任意接受<!--
和<!DOCTYPE
之间的所有字符,除非出现-->
介于两者之间。
我正在使用模式、匹配器和 java 正则表达式。 根据 Pattern.compile() 专用的正则表达式寻求帮助
提前致谢。
Pattern p = Pattern.compile("(?s)<!--(?:(?!-->).)*<!DOCTYPE");
(?:(?.-->).)*
一次匹配一个字符,在检查它不是-->
的第一个字符之后。
(?s)
设置 DOTALL 模式(又名单行模式),允许.
匹配换行符。
如果可能有两个或多个匹配项,并且您想单独查找它们,则可以将*
替换为非贪婪*?
,像这样:
"(?s)<!--(?:(?!-->).)*?<!DOCTYPE"
例如,将该正则表达式应用于问题文本将找到两个匹配项,而原始正则表达式将找到一个更长的匹配项。
这似乎很容易通过使用String.contains()
解决:
if (yourHtml.contains("-->")) {
// exclude
} else {
// extract the content you need
String content =
yourHtml.substring("<!--".length(), yourHtml.indexOf("<!DOCTYPE"));
}
我觉得你看得太远了。
\<!--([\s\S](?!--\>))*?(?=\<\!DOCTYPE)
这使用负前瞻来防止-->和正前瞻来查找<!DOCTYPE Here's a good reference for atomic assertions (lookahead and behind) 。
我没有方便的测试系统,所以我不能给你正则表达式,但你应该在 Pattern 文档中查看称为negative lookahead assertion
的东西。 这使您可以表达以下形式的规则:如果没有后跟,则匹配此。
它应该可以帮助你:)
正则表达式可能不是您问题的最佳答案。 您是否尝试过将第一行与其他所有内容分开并查看它是否包含-->
?
具体来说,类似:
String htmlString;
String firstLine = htmlString.split("\r?\n")[0];
if(firstLine.contains("-->"))
;//no match
//match
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.