确保字符串开始和结束可以匹配,否则失败正则表达式

时间:2010-01-21 03:50:06

标签: .net regex

我有这个正则表达式:

{link=([^|{}]+)|([^|{}]+)|([^|{}]+)}

这很好用,并在管道符号之间返回三组,即。来自this的{​​{1}},thatblah。只要文本不包含管道或两个大括号(因为它们是我的标记构建器中的保留字。)

然而,如果我正在测试字符串'fsdjklrwenklw'或其他任何内容,我仍然会得到匹配,我认为这是因为它不关心“{link=this|that|blah}”是否匹配,因为任何字符串都会然后在第一个背面参考中匹配。

可能写得很糟糕,有人可以帮帮我吗? 我必须只返回以“{link=”开头并以“{link=”结尾的字符串的引用。

PS。我尝试了}的简单前缀和后缀,这没有帮助。

感谢。

1 个答案:

答案 0 :(得分:2)

您需要转义|个字符。

您的正则表达式被解析为{link=([^|{}]+) | ([^|{}]+) | ([^|{}]+)}|字符表示'或',因此它匹配第一部分的第一部分或第二部分。

您需要撰写{link=([^|{}]+)\|([^|{}]+)\|([^|{}]+)}