我有一个RegEx,应该在方括号之间找到所有字母数字字符或文本,如上面链接中的示例所示。这些文本实际上是带有说明的链接(例如[[Toto|there's a link here]]
是指向页面Toto
的链接)
但是问题是我可能在方括号之间有其他文本,因此就像您在链接中看到的那样,它不能识别结尾的括号(]]
)。
在那些链接中还有另一个重要的模式,其中有管道(|
)将我的文本分为两部分或三部分。在其中有两个部分的情况下,我只想在左侧显示文本,而在我有三个部分的情况下,我要在右侧显示文本。
示例:
[[File:Euclid flowchart 1.png|vignette|[[Flowchart]] of an algorithm ([[Euclid's algorithm]]).]]
我只想要[[Flowchart]] of an algorithm ([[Euclid's algorithm]]).
部分(这是一个png,下面有说明,在此说明中还有其他链接)
[[Babylone|Babyloniens]]
我想要Babylone
在第一个示例中,还有其他链接,但是我可以使用第一个正则表达式或递归轻松提取它们。
您可以看到我的代码here
的示例答案 0 :(得分:1)
您可以尝试此模式\[\[(.+?)\|(.+?)(\|(.+))?\]\]
模式捕获以将管道|
之间的字符串分组。我使用了非贪心运算符.+?
,否则它将捕获所有内容,直到最后一个管道为止。非贪婪的操作员会捕获直到第一次出现管道。但是最后一个运算符是贪婪的-这是因为我们要捕获直到最后]]
的所有内容,因此与我们先前想要的相反。
(\|(.+))?
也表示第三部分(不包括附加的管道字符)是可选的(最多可以出现一次)。
这还需要额外的逻辑-您需要首先检查是否存在第四个捕获组,如果存在,则意味着该字符串已通过管道分成三部分。如果它不存在,那么它将仅分为两部分,在这种情况下,您想获得第一个捕获组。