2015-12-30 103 views
0

我試圖刪除出現在特定字符串前的input標籤。我有一個由form/table/tr/td/inputs組成的巨大字符串,超過100個字符串。下面是下面的示例HTML:正則表達式在字符串前刪除(排除)輸入標籤

<input type="hidden" name="special" value="123"> 
... 
<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76022" value="y"> Enable Search 
    </td> 
</tr> 

<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76006" value="y"> Enable Display 
    </td> 
</tr> 

<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76137" checked value="y"> Enable Notes 
    </td> 
</tr> 
... 

比方說,我想刪除輸入的標籤爲Enable Display。到目前爲止,我可以選擇啓用顯示, ^(.*?(\bEnable Display\b)[^$]*)$ 但我不知道如何去前標籤<input...>並將其刪除(或更好的是,選擇整個文檔,但不包括那些輸入)。

我也有孤獨input標籤,我必須刪除以及name屬性是什麼。所以基本上,正則表達式,這將使下面的輸出:

... 
<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76022" value="y"> Enable Search 
    </td> 
</tr> 

<tr> 
    <td> 
    Enable Display 
    </td> 
</tr> 

<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76137" checked value="y"> Enable Notes 
    </td> 
</tr> 
... 

正如你所看到的,名稱爲「特殊」的第一個隱藏的輸入消失以及輸入單詞「啓用顯示」旁邊。

回答

0

設計一個單一的正則表達式來達到你想要的效果並不是很微不足道,而且執行起來會很慢。

您可能想要考慮替代方法 - 循環使用行/標記(可能使用XML/HTML PHP分析器之一),並根據您的條件構建所需的輸出。

+0

我正在使用Symfony2從網頁上抓取數據。然後我將表單部分轉換爲一個字符串,我需要使用正則表達式來排除該字符串的某些部分,例如適當的輸入。 – Kenny

0
#!/usr/bin/php 
<?php 
$string = <<<'EOT' 
<input type="hidden" name="special" value="123"> 
... 
<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76022" value="y"> Enable Search 
    </td> 
</tr> 

<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76006" value="y"> Enable Display 
    </td> 
</tr> 

<tr> 
    <td> 
    <input type="checkbox" name="extendedeventinfo76137" checked value="y"> Enable Notes 
    </td> 
</tr> 
... 

EOT; 
echo preg_replace('/<input .* name="special" .*>| 
        <input .*>(?=\ Enable\ Display)/x', '', $string); 
相關問題