需要给出以下字符串“其他文本[[MyText]]其他文本”,并给出一些特定字符,如“[[”表示开头和“]]”为结束,能够匹配“[[MyText]]”。
鉴于以下regex = "(\[\[)(.*)(\]\])"
,我能够匹配我想要的,但不完全匹配。
假设我有这个字符串“其他文字[[Something ... [[MyText]] ......某事...... [[MyOtherText]]” - 我需要在这里有2个匹配“[[ MyText]]“&& “[[MyOtherText]]”。我的正则表达式太过热切,比我真正想要的还要多。
请除了答案之外,我希望了解它的工作原理,所以一些评论也会有所帮助。感谢。
答案 0 :(得分:6)
答案 1 :(得分:1)
你需要的是:
regex = "\[\[([^\[]*)\]\]"
如果你的文字中有'['你试图匹配或嵌套对,它会爆炸。
它以这种方式工作的原因是大多数正则表达式实现的默认greedy matching。简而言之,贪婪匹配正在尽可能多地覆盖匹配。我的正则表达式工作的原因是它不允许另一个“[”(所以它不能贪婪匹配到下一组)。享受你的维基工作。
答案 2 :(得分:0)
尝试:
\[{2}(?:(?!]]).)*]]
也适用于双[[and]]的单个[和和]。
有关详细说明,请参阅:http://www.regular-expressions.info/repeat.html
请注意]]不是元字符(在字符类之外),因此没有必要转义它。