正则表达式选择XML元素(包含连字符)和内部内容

时间:2013-08-21 15:10:29

标签: regex grep textwrangler

我正在使用企业CMS,为了正确创建我们每周更新的下拉菜单而不重新发布整个网站,我创建了一个XML文档,其中包含各种有用的XML元素。但是,当引入与CMS的链接时,生成的XML还会输出链接的内容(页面的整个HTML)。毋庸置疑,大约有50个项目,XML文件太大而无法在网络上使用(因为我认为它超过600KB)。元素是<page-content>filler here</page-content>

我要做的是使用TextWrangler查找并替换所有<page-content>标记及其包含的内容。

我尝试了一些不同的正则表达式,但我似乎无法匹配结束标记,所以它只会跟踪。

这是我尝试过的:

(<page-content>)(.*?)

上述内容将匹配到下一个开始<page-content>标记,这不是我想要的。

(<page-content>)(.*?)(<\/page-content>)
(<page-content>)(.*?)(<\/page\-content>)

上面没有找到匹配项,即使下面会找到它应该匹配的7个匹配项。

(<content>)(.*?)(<\/content>)

我不知道是否有一种特殊的方式来处理连字符(我对正则表达式缺乏经验),但如果有人能帮助我,我将非常感激。

谢谢!

编辑:在你告诉我Regex不打算解析HTML之前,我知道,但似乎没有其他方法可以轻松找到并替换它。手动删除它并且每周都会再次保存文件的次数太多了。

1 个答案:

答案 0 :(得分:1)

问题似乎是您的.与开放标记和关闭标记之间存在的换行符不匹配。

一个简单的解决方案是添加s标记,以便.匹配换行符。 TextWrangler似乎支持内联修饰符(?s)。你可以这样做:

(<page-content>)(?s)(.*?)(<\/page-content>)

有关修饰符here的更多信息。