Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在带有一些约束(内括号)正则表达式的句子中查找括号之间的单词_C++_Regex - Fatal编程技术网

C++ 在带有一些约束(内括号)正则表达式的句子中查找括号之间的单词

C++ 在带有一些约束(内括号)正则表达式的句子中查找括号之间的单词,c++,regex,C++,Regex,我对下面这句话有一个看法: [[Image:Levellers declaration and standard.gif|thumb|200px|Woodcut from a [[Diggers]] document by william everard]] Image:Levellers declaration and standard.gif|thumb|200px|Woodcut from a [[Diggers]] document by william everard 正则表达式

我对下面这句话有一个看法:

[[Image:Levellers declaration and standard.gif|thumb|200px|Woodcut from a [[Diggers]] document by william everard]]
Image:Levellers declaration and standard.gif|thumb|200px|Woodcut from a [[Diggers]] document by william everard

正则表达式 我使用以下正则表达式来提取括号中的单词[[]]

regex = "\\[\\[(.*?)\\]\\]"
输出应等于以下句子:

[[Image:Levellers declaration and standard.gif|thumb|200px|Woodcut from a [[Diggers]] document by william everard]]
Image:Levellers declaration and standard.gif|thumb|200px|Woodcut from a [[Diggers]] document by william everard
我只想考虑最左边的括号]]


问题 regex将从[[Diggers]]中提取
[[Image:levelers declaration and standard.gif | thumb | 200px |木刻]
并留下威廉·埃弗拉德的
文档]


问题: 如何忽略由]表示的内括号


更新V0 受启发,我编写了一个简单的程序,以便在字符串的括号中找到文本的开头和结尾


源代码
我认为你的问题在于你使用了一个懒惰的(
*?
)量词,而不是贪婪的(
*
)量词

惰性量词将在遇到字符串中的第一个
]
时立即停止,即使它不是最后一个

您只需将正则表达式修改为:

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

C++正则表达式不能完成括号平衡。改为编写一个解析器,或者使用一个能够平衡括号的引擎,比如PCRE。尝试“\[\[(.*?\]\]$”@fro:这将在一个长的wiki(?)文档上失败。您不是处于贪婪模式,所以在第一个
]
处停止,您可以删除
以在最后停止。如果没有更深的嵌套,请尝试使用:
“\[\[\[(?:(?:(?!\[\[\[\[\[\[\;\])\]))|\\[\\[.\]\\]]*)\]\\\]\\]“
看看它是否那么简单,只要修剪前导和尾随的
[
s和
]
s就足够了。@Theox所以我会阻止正则表达式在遇到第一个]]时退出。@HaniGoc:在一行有两个的字符串上,您将只得到其中一个。此解决方案已损坏。是的,您是对的@nhahtdh。是我的错,我问的问题不对。你完全正确。通过使用PCRE库,我能解决这个问题吗?@HaniGoc:这应该是可能的。您应该在PHP中查找有关括号平衡的问题,以了解如何编写这样的模式。