正则表达式:查找具有两次属性的html标签?

时间:2014-02-21 02:09:31

标签: regex

是否可以找到任何声明了两次声明的标签?更具体地说,我想扫描html文档并查找任何具有class =“”两次的标记。

所以类似于:

<textarea class='something' id='nomatter' name='nomatter' class='different'>

感谢您的时间和考虑!

3 个答案:

答案 0 :(得分:1)

您可以使用此模式:

<\w+(?:[^>]*?\sclass\s*=){2}[^>]+>

答案 1 :(得分:0)

我认为这取决于你正在使用正则表达式的上下文。你是在文本编辑器,PHP还是其他东西?

另外,您是否只是想手动调整它们还是替换它们?

某些正则表达式引擎允许您在搜索字符串中使用捕获的组。

你可能会做这样的事情,只是为了找到它们:

<.+?\s([a-zA-Z]+?)='[a-zA-z-]+?'.*?\s\1='[a-zA-Z-]+?'.*?>

那里的\1引用了开头附近的括号中的第一个(也是唯一一个)捕获的组。

http://regex101.com/r/gH1uJ4

在一个不相关的说明中,我认为您在HTML属性中使用单引号很奇怪。

答案 2 :(得分:0)

#!/usr/bin/perl
use strict;
use warnings;

my $string = "<textarea class='something' id='nomatter' name='nomatter' class='different'>";
my @matches = ($string =~ m/<.+?class='([a-zA-Z]+?)'.*class='([a-zA-Z-]+?)'/g);
if ( scalar @matches > 1 ) { print "There is two class attributes in this line!\n"; }