簡體   English   中英

正則表達式僅匹配內部模式?

[英]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]]| 正確的位置和]]的結尾

這是因為您可以讓表達式消耗所有內容,只要它不是豎線即可。

如果更改表達式以避免在第一組中使用右括號,則它應捕獲所需的文本:

\[\[([^\]|]*?)\|([^]]*?)\]\]

此更改的另一個積極方面是,它將消除對正則表達式求值過程的回溯 ,從而可以顯着提高性能。

ideone上的演示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM