用于提取几个<div>标记的java正则表达式
以下是输入字符串:
<div class="matchthis">Orange</div>
<div class="dontmatch">One</div>
<div class="matchthis" id="hurdle">Lemon</div>
<div class="dontmatch">Two</div>
<div id="hurdle" class="matchthis">Peach</div>
我想在下面输出(包含class="matchthis"
的所有<div>
标记):
<div class="matchthis">Orange</div>
<div class="matchthis" id="hurdle">Lemon</div>
<div id="hurdle" class="matchthis">Peach</div>
这个Java正则表达式将只输出以下内容:
<div class="matchthis">Orange</div>
请帮助改进正则表达式以获得所需的输出
请不要告诉我使用较慢的DOM/Soup/等。我想知道raw regex能否解决上述简单问题(你将获得答案!)。是的,我知道this post,所以别提了
# 1 楼答案
如果标记不能嵌套,这是可能的
您可以将
(?:\s+\w+=(?:"[^"]*"|'[^']*'|\S*))*
添加到属性的两侧不要认为这比一个好的解析器更快
# 2 楼答案
要分解它
由于
由于
或双引号属性值
或单引号属性值
Pattern.DOTALL
意味着.*?
将允许在div
正文中使用换行符Pattern.CASE_INSENSITIVE
使它能够正确地处理HTML元素名称的大小写折叠,不过如果您的默认语言环境是土耳其语,那么<DİV>
可能会有一些奇怪的地方(请注意虚线I)# 3 楼答案
<div [^>]*class=\"matchthis\"[^>]*>(.*?)(?=</div>)