正则表达式匹配给定字符之间的内容

时间:2009-10-08 13:34:25

标签: regex

需要给出以下字符串“其他文本[[MyText]]其他文本”,并给出一些特定字符,如“[[”表示开头和“]]”为结束,能够匹配“[[MyText]]”。

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

假设我有这个字符串“其他文字[[Something ... [[MyText]] ......某事...... [[MyOtherText]]” - 我需要在这里有2个匹配“[[ MyText]]“&& “[[MyOtherText]]”。我的正则表达式太过热切,比我真正想要的还要多。

请除了答案之外,我希望了解它的工作原理,所以一些评论也会有所帮助。感谢。

3 个答案:

答案 0 :(得分:6)

也许您正在寻找non-greedy pattern或“perlre”。

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

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

答案 1 :(得分:1)

你需要的是:

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

如果你的文字中有'['你试图匹配或嵌套对,它会爆炸。

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

答案 2 :(得分:0)

尝试:

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

也适用于双[[and]]的单个[和和]。

有关详细说明,请参阅:http://www.regular-expressions.info/repeat.html

请注意]]不是元字符(在字符类之外),因此没有必要转义它。