HTML last标签条件匹配

时间:2008-11-26 06:05:38

标签: .net regex

我有两个字符串

<EM>is <i>love</i></EM>,<PARTITION />

<EM>is <i>love</i>,<PARTITION />

我希望正则表达式完全匹配第二个字符串,但不应与第一个字符串匹配。请帮忙。

注意:除EM和PARTITION标签外,一切都可以改变。

4 个答案:

答案 0 :(得分:1)

如果要完全匹配字符串(如果它不包含某个子字符串),请使用正则表达式匹配子字符串,如果正则表达式不匹配则返回整个字符串。你没有说你正在使用哪种语言,但你用.NET标记了你的问题,所以这里用C#:

if (Regex.IsMatch(subjectString, "</EM>")) {
    return null;
} else {
    return subjectString;
} 

由于只是一些文字文本,您甚至不需要使用正则表达式:

if (subjectString.Contains("</EM>")) {
    return null;
} else {
    return subjectString;
} 

在所有你可以使用的是正则表达式的情况下,试试这个:

\A((?!</EM>).)*\Z

仅使用正则表达式的解决方案的效率远低于上述代码示例。

答案 1 :(得分:0)

我认为你没有问正确的问题。此正则表达式完全匹配第二个字符串而不是第一个字符串:

/^<EM>is <i>love<\/i>,<PARTITION \/>$/

但显然,你想要匹配一类字符串,而不仅仅是第二个字符串......对吗?定义您想要匹配的字符串类,您可以更接近获得所需的正则表达式。

答案 2 :(得分:0)

^<EM>(?:(?<!</EM>).)*<PARTITION />$

的工作原理。但它取决于目标语言,例如,JavaScript不支持环绕声断言......

更简单的解决方案是使用^<EM>.*<PARTITION />$,然后检查字符串中是否有</EM>:我相信RE是强大的,必须有,但我不会尝试做任何事情只有一个表达式......: - )

答案 3 :(得分:0)

幸运地经历了这一切并对此进行了大量研究我找到了正确的regexx .......... heres为你们所有人...感谢所有帮助过的人

<EM>\w*\s*\W*\S*[^\(</EM>)]<PARTITION[ ]/>

捕获第二个字符串但是留下第一个字符串....我唯一的问题是否定了</EM>组合,我在组之前用反斜杠做了,这否定了完整的字符串而不是取人物分开......