我有这个正则表达式:
{link=([^|{}]+)|([^|{}]+)|([^|{}]+)}
这很好用,并在管道符号之间返回三组,即。来自this
的{{1}},that
和blah
。只要文本不包含管道或两个大括号(因为它们是我的标记构建器中的保留字。)
然而,如果我正在测试字符串'fsdjklrwenklw'或其他任何内容,我仍然会得到匹配,我认为这是因为它不关心“{link=this|that|blah}
”是否匹配,因为任何字符串都会然后在第一个背面参考中匹配。
可能写得很糟糕,有人可以帮帮我吗?
我必须只返回以“{link=
”开头并以“{link=
”结尾的字符串的引用。
PS。我尝试了}
的简单前缀和后缀,这没有帮助。
感谢。
答案 0 :(得分:2)
您需要转义|
个字符。
您的正则表达式被解析为{link=([^|{}]+)
|
([^|{}]+)
|
([^|{}]+)}
。
|
字符表示'或',因此它匹配第一部分的第一部分或第二部分。
您需要撰写{link=([^|{}]+)\|([^|{}]+)\|([^|{}]+)}
。