修复这个.NET正则表达式

时间:2014-06-17 08:54:49

标签: .net xml regex

我希望得到您的帮助,找出.NET正则表达式的错误。我已经成千上万的表达,但我完全坚持修复这个简单的表达。

正则表达式如下:

(?isx)
            <Field 
                (
                    \s+ 
                    | 
                    name    =   "(?<name>  [^"]*?)" 
                    |
                    type    =   "(?<type>  [^"]*?)"
                    |
                    value   =   "(?<value> [^"]*?)"
                )+
            >‭
                (?<content> .*?)
            </Field>

我想要捕捉的是像这样的XML部分:

<Field name="SolutionList/0/ModuleType" type="Enumeration" value="StartSectionModule"></Field>
<Field name="SolutionList/0/StartSectionModule/Title" type="String">Áttekintés</Field>
<Field name="SolutionList/0/TextModule/HtmlContent" type="RichContent"><![CDATA[]]></Field>

现在我要尝试逐步简化表达式以尝试找到有缺陷的部分,但我无法在几个小时内完成任何相关进展。

谢谢你的时间,伙计。

2 个答案:

答案 0 :(得分:0)

除了在正则表达式中解析html的所有警告......

存在小间距问题。

我把它从自由间隔模式中取出来了。这个平面正则表达式现在有效:

(?s)<Field(\s+|name="(?<name>[^"]*?)"|type="(?<type>[^"]*?)"|value="(?<value>[^"]*?)")+>(?<content>.*?)</Field>

既然你写了它,我就不会向你解释了!

答案 1 :(得分:0)

您的第一个>后面有left-to-right个隐身字符。将其删除并you'll be fine

此外,您应该避免(\s+)+类型的情况以避免灾难性的回溯:

(?isx)
    <Field 
        (?:
            \s+ 
            (?: 
                name    =   "(?<name>  [^"]*?)"
                |
                type    =   "(?<type>  [^"]*?)"
                |
                value   =   "(?<value> [^"]*?)"
            )
        )+
    >
    (?<content> .*?)
    </Field>