我正在嘗試[[String]]使用正則運算式提取。注意括號如何打開 [ 并且它需要關閉 ]。因此,您將收到以下匹配項:
[[String]][String]String
如果我使用\[[^\]] \]它,它只會找到它遇到的第一個結束括號,而不考慮在兩者之間打開了一個新括號并且它需要第二個結束括號。這完全可能用正則運算式嗎?
注意:此型別可以是 String、[String] 或 [[String]],因此您不知道將有多少個括號。
uj5u.com熱心網友回復:
您可以使用以下符合 PCRE 的正則運算式:
(?=((\[(?:\w |(?2))*])|\b\w ))
請參閱正則運算式演示。詳情:
(?=- 開始正向前瞻(必須匹配重疊字串):(- 開始捕獲組 1(它將保存“匹配項”):(\[(?:\w |(?2))*])- 第 2 組(技術上,用于[遞回):,然后零次或多次出現一個或多個單詞字符或整個第 2 組模式遞回,然后是一個]字符|- 或者\b\w- 一個單詞邊界(因為正在搜索所有重疊的匹配項,所以是必需的)和一個或多個單詞字符
)- 第 1 組結束
)- 前瞻結束。
請參閱PHP 演示:
$s = "[[String]]";
if (preg_match_all('~(?=((\[(?:\w |(?2))*])|\b\w ))~', $s, $m)){
print_r($m[1]);
}
輸出:
Array
(
[0] => [[String]]
[1] => [String]
[2] => String
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334534.html
