2011-06-16 138 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