в Python, но синтаксис должен быть таким же,
#!/usr/bin/python
import re
ptn = re.compile(r"""
{link=
(?:
(?:([^|}]+)\|)?
(?:([^|}]+)\|)
)?
([^|}]+)
}
""", re.VERBOSE)
l = [
"{link=a}",
"{link=a|b}",
"{link=a|b|c}",
"{link=a} {link=a|b} {link=a|b|c}",
]
for s in l:
for m in ptn.finditer(s):
print "%s => matchs: %s => m.group(3): %s" % (
s, m.group(0), m.group(3))
и результат:
{link=a} => matchs: {link=a} => m.group(3): a
{link=a|b} => matchs: {link=a|b} => m.group(3): b
{link=a|b|c} => matchs: {link=a|b|c} => m.group(3): c
{link=a} {link=a|b} {link=a|b|c} => matchs: {link=a} => m.group(3): a
{link=a} {link=a|b} {link=a|b|c} => matchs: {link=a|b} => m.group(3): b
{link=a} {link=a|b} {link=a|b|c} => matchs: {link=a|b|c} => m.group(3): c