[英]Regex match only inner pattern?
嘿,我有以下字符串:
# The [[state]] that follows [[birth]], and precedes [[death]]; the state of
[[be]]ing [[alive]] and [[live|living]].#
現在,我想找到的是[[live|living]]
,我嘗試了以下表達式:
\[\[(.*?)\|(.*?)\]\]
問題在於它與[[
[[state]]
的|
正確的位置和]]
的結尾
如何設置僅能獲得最內部[[
]]
模式的模式? 也許在(.*?)
排除右方括號? 如果可以,那該怎么辦?
注意:我使用的是Java,所以\\
實際上是兩次,但是用一個\\
簡化了它\\
在您的匹配項中使用方括號([^\\[\\]]*)
的否定字符類
~\[\[([^\[\]]*)\]\]~
您正在嘗試匹配兩個連續的括號( [[
),然后是東西 ( (.*?)
),然后是管道( |
), 這是問題所在,因為它消耗了太多 ,盡管您已將點設為非-貪婪..
嘗試這個:
\[\[([^[]*)\|(.*?)\]\]
此模式比使用的模式更具限制性.
:子模式[^[]+
與不是括號的(連續)字符序列匹配。
問題在於它與
[[
[[state]]
的|
正確的位置和]]
的結尾
這是因為您可以讓表達式消耗所有內容,只要它不是豎線即可。
如果更改表達式以避免在第一組中使用右括號,則它應捕獲所需的文本:
\[\[([^\]|]*?)\|([^]]*?)\]\]
此更改的另一個積極方面是,它將消除對正則表達式求值過程的回溯 ,從而可以顯着提高性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.