我在正则表达式的lookahead中仍然有问题。在这个例子中,我不确定我是误解了lookahead的意图,还是我只是使用了错误的语法。
初始情况
输入行可以如下所示,其中one
和two
应该是结果。
[[one][two]]
[[one]]
中间的][
是可选的。
我最初的正则表达式模式只适合第一个例子中的两个。
^\[\[(.*)\]\[(.*)\]\]$
导致
首次修改
我扩展了我的模式,因为可选的][
带有一个“非捕获组”。
^\[\[(.*)(?:\]\[)?(.*)\]\]$
导致
使用lookahead进行二次修改
现在恕我直言,前瞻性开始考虑了。我说得对吗?第一组应该“捕获”(提取字符串)直到][
出现。][
就像一个停止标志。
现在我在雾里看花,像这样的东西不工作:
^\[\[((?!\]\[).*)(\]\[)?(.*)\]\]$
1条答案
按热度按时间falq053o1#
你可以用
参见regex demo。
^
-字符串的开头\[\[
-[[
字符串([^][]*)
-第1组:[
和]
以外的零个或多个字符(?:]\[([^][]*))?
-][
+组2的可选序列:除[
和]
之外的任意零个或多个字符]]
-]]
子字符串$
-字符串结束。如果您可以在
[[
和][
之间,然后在][
和最后一个]]
之间使用任何字符,则可以使用参见this regex demo。
^
-字符串的开头\[\[
-[[
字符串((?:(?!]\[).)*)
-第1组:除换行符字符以外的任何字符,零个或更多,但尽可能多地出现,不开始][
字符序列(?:]\[(.*))?
-][
的可选序列,然后第2组捕获除换行符字符以外的任何零个或多个字符,尽可能多]]
-]]
字符串$
-字符串结束。