java正则表达式为什么这两个正则表达式不同
我有一个java字符串演示了一个div元素:java正则表达式为什么这两个正则表达式不同,java,regex,Java,Regex,我有一个java字符串演示了一个div元素: String source = "<div class = \"ads\">\n" + "\t<dl style = \"font-size:14px; color:blue;\">\n" + "\t\t<li>\n" + "\t\t\t<a href = \"http://ggicci.blog.163.com\
String source = "<div class = \"ads\">\n" +
"\t<dl style = \"font-size:14px; color:blue;\">\n" +
"\t\t<li>\n" +
"\t\t\t<a href = \"http://ggicci.blog.163.com\" target = \"_blank\">Ggicci's Blog</a>\n" +
"\t\t</li>\n" +
"\t</dl>\n" +
"</div>\n";
那么为什么“.”不能与“a”匹配呢?在方括号内,字符被视为文字<代码>[.\\s]表示“匹配点、反斜杠或s”
(.|\\s)
相当于
我认为您确实需要以下正则表达式:
<dl[^>]*>.*?</div>
]*>.*?
在方括号内,字符按文字处理<代码>[.\\s]表示“匹配点、反斜杠或s”
(.|\\s)
相当于
我认为您确实需要以下正则表达式:
<dl[^>]*>.*?</div>
]*>.*?
+1用于上述内容
我会:
<dl[^>]*>(.*?)</dl>
]*>(**?)
以匹配上面的dl
+1的内容
我会:
<dl[^>]*>(.*?)</dl>
]*>(**?)
为了匹配
dl
的内容,语法[.\\s]
毫无意义,因为正如Daniel所说,
在本文中仅表示“一个点”
为什么你不能用更简单的
替换你的[.\\s]
?语法[.\\s]
毫无意义,因为,丹尼尔说,
在这个上下文中只意味着“一个点”
为什么不能用更简单的
替换[.\\s]
?当您在post中包含正则表达式时,最好在实际使用时发布它们——在本例中,作为Java字符串文本
“[.\\s]”
是一个Java字符串文字,表示正则表达式[.\s]
;它匹配文字点或空白字符。您的正则表达式并不像其他人所说的那样试图匹配反斜杠或“s”,但关键因素是
在字符类中失去了其特殊意义
“(.|\\s)”
是一个Java字符串文字,表示正则表达式(.|\s)
;它匹配(除行分隔符或任何空白字符外的任何字符)。它可以按您的预期工作,但不要使用它它使您极易受到攻击,如中所述
但不用担心,您真正需要做的就是使用DOTALL模式(也称为单行模式),它允许
匹配任何内容,包括行分隔符字符
(?s)<dl\b[^>]*>.*?</dl>
(?s)]*>*?
当您在post中包含正则表达式时,最好在实际使用它们时发布它们——在本例中,将它们作为Java字符串文本发布
“[.\\s]”
是一个Java字符串文字,表示正则表达式[.\s]
;它匹配文字点或空白字符。您的正则表达式并不像其他人所说的那样试图匹配反斜杠或“s”,但关键因素是
在字符类中失去了其特殊意义
“(.|\\s)”
是一个Java字符串文字,表示正则表达式(.|\s)
;它匹配(除行分隔符或任何空白字符外的任何字符)。它可以按您的预期工作,但不要使用它它使您极易受到攻击,如中所述
但不用担心,您真正需要做的就是使用DOTALL模式(也称为单行模式),它允许
匹配任何内容,包括行分隔符字符
(?s)<dl\b[^>]*>.*?</dl>
(?s)]*>*?
但是。无法匹配\n,如果和之间的内容包含\n或\r,它将无法正常工作。但是。无法匹配\n,如果和之间的内容包含\n或\r,它将无法正常工作。谢谢:)现在我了解了有关灾难性回溯的更多信息。因为我的阅读能力很差,所以很难理解这个机制。但我正在尽我最大的努力…谢谢:)现在我对灾难性回溯了解更多了。因为我的阅读能力很差,所以很难理解这个机制。但是我正在尽我最大的努力。。。
(?s)<dl\b[^>]*>.*?</dl>