2011-06-16 54 views
7

這裏裏面有一定的文字圖案是一個示例自定義標籤,我從一個sitemap.xml的有正則表達式匹配的打開和關閉標籤,並且標籤

<url> 
    <loc>http://sitename.com/programming/php/?C=D;O=A</loc> 
    <changefreq>weekly</changefreq> 
    <priority>0.64</priority> 
</url> 

有很多這樣的項目,如果你看到loc標記它有c = d; 0 = a在最後。 我想刪除以<url>開頭的所有條目,結尾爲</url>,其中包含C = D; 0 = A或類似的模式。

下面的表達式匹配整個上述指定標籤

<url>(.|\r\n)*?<\/url> 

,但我要匹配像什麼,我在上述聲明已明確。

我們如何形成正則表達式來匹配這些條件(模式)?

+0

你不這樣做,看到http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2011-06-16 08:13:55

+1

@Fredrik,答案是不正確的。正則表達式可以用來解析XML,但這不是最好的方式。 – Karolis 2011-06-16 08:19:26

+1

@Fredrik:在這裏使用正則表達式沒有問題。 OP不是試圖解析XML,而是一個非常特殊的子集,看起來像他在帖子中的例子。 – Tim 2011-06-16 08:35:32

回答

10

試試這個:

你不匹配多個節點
/<url>(?:(?!<\/url>).)*C=D;O=A.*?<\/url>/m 

負先行擔保。

在這裏看到:rubular

+0

我忘了提及我使用Dreamweaver刪除。無論如何,讓會見嘗試,並會在這裏更新。 – 2011-06-17 12:04:47

+0

好的,Dreamweaver可能不支持lookaround ...但試試看。對於Dreamweaver, – morja 2011-06-17 12:09:27

+0

它不起作用。希望它能在PHP中工作...? – 2011-07-07 13:34:43

7

使用XML的正則表達式不是一個好主意。根據您使用某種XML閱讀器的語言,提取<url>節點,然後使用正則表達式來匹配節點的內容。 許多XML庫支持查詢XML數據的一種有用語言是XPath

+0

我沒有使用正則表達式來解析xml,但它只是我的站點地圖它有所有這些條目,因爲我沒有一個重要的文件夾中有很多子文件夾的默認index.htm腳本。我想更新我的站點地圖而不用那些額外的c = d項目,所以我需要一個正則表達式來移除所有這些條目並保持站點清理。所以我不能寫一個程序來刪除不需要的條目,而只需要一個正則表達式即時刪除它,並想更新我的站點地圖。 – 2011-06-17 12:01:55

+0

有時這些庫過度殺傷。例如,處理包含有限html類標籤的wiki文本。 @ morja的答案實際上回答了這個問題... – Jonathan 2014-02-15 02:20:42

0

如果你絕對必須使用正則表達式,這一個:

<([a-z][a-z0-9]*)\b[^>]*>(.*?)(C=D;O=A){1}(.*?)</\1> 

將讓你行:

http://sitename.com/programming/php/?C=D;O=A

然後,我會遍歷到父標籤並做任何我想要的東西。

+0

它只匹配一行而不是完整的url打開和關閉標記。 – 2011-07-07 13:35:33

相關問題