2009-10-08 76 views
0

需要给出以下字符串“其他文本[[MyText]]其他文本”,并给出了一些特定的字符,如“[[”for start和“]]”最后,能够匹配“[[MyText]]”。正则表达式匹配给定字符之间的内容

鉴于以下regex = "(\[\[)(.*)(\]\])"我能够匹配我想要的,但不完全一样。

可以说我有这个字符串“其他文本[[Something ... [[MyText]] ......某事... [[MyOtherText]]” - 我需要在这里有2个匹配“[[ [MyText]]“& &”[[MyOtherText]]“。我的正则表达式太渴望,比我真正想要的更多。

请,除了我正在寻找理解它是如何工作的答案,所以一些评论也会有所帮助。谢谢。

回答

6

也许您在寻找non-greedy pattern或'perlre'。

(\[\[)(.*?)(\]\]) 

请注意,额外的'?'字符;

+0

+1,但它如何返回两个匹配? – mouviciel 2009-10-08 13:47:54

+0

工作。我真的应该停止使用Visual Studio查找对话框来测试我的正则表达式,因为我试过了,而Studio没有发现任何东西! – 2009-10-08 14:06:39

+0

试试这个:http://www.radsoftware.com.au/regexdesigner/ – 2009-10-08 14:32:00

1

你需要的是这样的:

regex = "\[\[([^\[]*)\]\]" 

它会不会有问题,如果你有一个“[”在你的文字你去匹配,或者嵌套对。

它这样工作的原因是大多数正则表达式实现的默认greedy matching。简而言之,贪婪的匹配正在尽可能地取胜。我的正则表达式工作的原因是它不允许另一个“[”(所以它不能贪婪地匹配下一个集合)。享受您的维基工作。

+0

看起来很可疑 - 捕手子句匹配零个或多个空心方括号(在最初的两个之后)。这不是问题。 – 2009-10-08 13:47:42

+1

该正则表达式匹配“[[]]”,“[[[[[[[[]]”等)不是“[[MyText]]”。你可能意思是“\ [\ [[^ \]] * \] \]” – 2009-10-08 13:49:23

+0

感谢Johnathan,Bart,我忘记了所有重要的^。 – 2009-10-08 14:02:57

0

尝试:

\[{2}(?:(?!]]).)*]] 

单同样适用['S和]的内部你的双[[和]]的。

对于一个很好的说明,请参见:http://www.regular-expressions.info/repeat.html

注意]不是元字符(字符类外),所以没有真正的需要,以逃避它。