嘿,我有以下字符串:
# The [[state]] that follows [[birth]], and precedes [[death]]; the state of
[[be]]ing [[alive]] and [[live|living]].#
现在我希望找到的是[[live|living]]
,
我尝试过以下表达式:
\[\[(.*?)\|(.*?)\]\]
问题是它与[[
的{{1}},正确位置的[[state]]
和|
如何设置仅获得最内在]]
[[
模式的模式?也许在]]
结束的方括号中排除?如果是这样,怎么办呢?
注意:我正在使用java,因此(.*?)
实际上是两倍,但只用一个\
答案 0 :(得分:0)
在比赛中使用方括号([^\[\]]*)
的否定字符类
~\[\[([^\[\]]*)\]\]~
答案 1 :(得分:0)
您尝试匹配两个连续的括号([[
),然后是某物((.*?)
),然后是管道(|
) - 那个<强烈>某事是问题,因为消耗太多,虽然你已经让点非贪婪..
试试这个:
\[\[([^[]*)\|(.*?)\]\]
此模式比使用.
的模式更具限制性:子模式[^[]+
匹配不开头括号的(连续)字符序列。
答案 2 :(得分:0)
问题是它与
的结尾相匹配[[
的{{1}},正确位置的[[state]]
和|
这是因为你让你的表达式消耗所有东西,只要它不是垂直条。
如果更改表达式以避免在第一组中关闭括号,则应捕获所需的文本:
]]
此更改的另一个积极方面是,它会从正则表达式的评估过程中消除backtracking,这可以显着提高性能。