2014-02-21 61 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"; }