正则表达式过滤具有特定属性的XAML标记

时间:2011-09-15 17:41:19

标签: regex xaml

我有以下与XAML标记匹配的正则表达式:

的百分比抑制率^<>] *>

这将返回以下两行:

<Button x:Name="Button1" />
<Button x:Name="Button2" Content="foo" />

我想要做的是过滤掉其中包含“Content =”foo“”的标签。

有类似的例子,但在这种情况下,引号会让我感到沮丧。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

正则表达式

/<[^>]*Content="foo".*?>/g

这意味着启动正则表达式(/)并搜索<被零或更多而不是 > s([^>]*)后跟Content="foo"后跟零个或多个任意事件(.* un -greedily,然后是'&gt;'并结束正则表达式/

测试代码:

用javascipt编写,但可以轻松移植到其他语言中。

x = ['<Button x:Name="Button1" /><Button x:Name="Button2" Content="foo" /><Button x:Name="Button1" /><Button Content="foo" />']

console.log( x[0].match(/<[^>]*Content="foo".*?>/g) )

更新以匹配完全相反(根据OP的要求)

正则表达式

使用否定先行断言,detailed here

<((?!Content="foo")[^>])*>

这意味着匹配<后跟零或更多不> s([^>]*),其中每个Content="foo"前面都没有>后跟{{1}} }。添加了括号以进行必要的分组。

但请记住 - 使用正则表达式替代XML解析会让堆栈溢出的人真的生你的气......所以最好匿名发布这样的问题。 ;)

答案 1 :(得分:1)

<([^<>](?!\sContent\s*=\s*("foo"|'foo')))*>

这......但请不要使用Regexes来解析XML。

我们使用[^<>]捕获的每个字符,我们检查后面是否有一个空格和Content="foo"。如果为true,则我们失败,因此捕获将回滚一个字符,正则表达式检查终止>

http://regexr.com?2umr9

你必须点击一下才能使“正则表达式”被“激活”。

一些小注释:这个正则表达式是错误的,因为它试图解析XML,但忽略了这一点,它不会被SContent="foo"(忽略)或Content='foo'(捕获)或{{1 }}(忽略)或:Content='foo'(catched)。如果您正在使用将Content = "foo"视为与XML相同的空格字符列表的正则表达式解析器,这一点很清楚:-)否则一些“奇怪的,异类的”空格可能会破坏它。请记住将它与区分大小写的解析一起使用!