2014-02-21 60 views
0

是否有可能找到任何具有属性声明两次的标签?更具体地说,我想浏览html文档并查找任何具有class =“”的标记两次。正则表达式:找到有两次属性的html标签?

所以一些类似于:

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

谢谢您的时间和代价!

+1

你用什么语言?你想用这个属性做什么? –

+0

使用Netbeans编辑php/html文件。我只是想找到现在的双班。 – Ryan

回答

1

您可以使用此模式:

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

Bam!谢谢! – Ryan

0

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

此外,你只是发现手动调整它们还是有更换涉及?

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

你可能会做这样的事情,只要找到他们:

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

\1在那里被引用在起点附近,括号中的第一个(也是唯一一个)拍摄组。

http://regex101.com/r/gH1uJ4

在一个不相关的说明,我认为这是奇怪的,你正在使用你的HTML属性单引号。

+0

是的,使用Netbeans编辑php/html。你的解决方案没有在那里工作,我猜它现在可以使用捕获的组了吗? – Ryan

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"; }