2011-04-05 101 views
0

我有一个字符串,它看起来像:有条件的正则表达式

this is a string [[and]] it is [[awesome|amazing]] 

我有以下的正则表达式到目前为止:

(?<mygroup>(?<=\[\[).+?(?=\]\])) 

我基本上是试图捕捉括号内的一切。但是,我需要添加另一个条件:如果匹配的结果包含管道分隔符,则只将该单词返回到管道分隔符的右侧。如果没有管道,则只需返回括号内的所有内容。

我找给出的示例中的解析结果,上面应该是这样的:

和 惊人

任何输入赞赏。

+0

可能重复的[AS3 RegExp question](http://stackoverflow.com/questions/5443149/as3-regexp-question) – Kobi 2011-04-05 22:06:24

+0

将(。* |)?(。*)做诡计吗?第一组或者是东西直到管道,或者什么都不是。第二组是你正在寻找的... – 2011-04-05 22:07:34

回答

2
(?<mygroup>(?<=\[\[)([^|\]]*|)?([^|]+?)(?=\]\])) 
0

regex信息页面:

的巨大力量和现代的正则表达式的表现力 可以 勾引轻信 - 或者鲁莽 - 到试图在每一个 与字符串使用正则表达式他们遇到的相关任务。

我的建议:只要抓住括号中的内容并解析它。

正则表达式不是一切的答案。愿那些追随你的人避免破译你所提出的正则表达式。

1

你可以使用这个表达式:

(?<=\[\[[^\]]*?)(?!\w+\|)\w+(?=\]\]) 

它在您的测试例子都andamazing词相匹配。你可以查看它,我在Ideone上创建了一个测试应用程序。