2014-04-01 51 views
1

請仔細閱讀本問題的第1部分: -需要幫助的正則表達式,子2點的正則表達式之間

Need Help In Regex, substring between two brackets

$result = ''; 
$str = ' ... [ ... SUB_STRING_TO_BE_SEARCHED ... ] ... [ .../... SUB_STRING_TO_BE_SEARCHED ... ] ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]'; 
$sub_str = ''; 
if(preg_match('#\[.*?'.$sub_str.'.*?\]#' , $str)) { 
    if (preg_match(REGEX_2 , $str)) { 
     $result = preg_replace(REGEX_3 , '', $str); 
    } else { 
     $result = preg_replace('#\[.*?'.$sub_str.'.*?\]#', '', $str); 
    } 
} 

$結果應該是: -

$result = " ... ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"; 

然而,$ str_2: -

$str_2 = ' ... [ ... SUB_STRING_TO_BE_SEARCHED ... ] ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]'; 

$結果也應保持: -

$result = " ... ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"; 

說明: -

第1步:好了,從以前的問題,我可以很容易地得到這個字符串: -

[ ... THIS_SHOULD_NOT_GET_SELECTED ... ] 

第2步: - REGEX_2應該檢查這是否存在: -

[ .../... THIS_SHOULD_NOT_GET_SELECTED ... ] 

(注意正斜槓,讓我們假設它只會出現一次EEN的THIS_SHOULD_NOT_GET_SELECTED和左托架[

步驟3: - 如果發現REGEX_2然後REGEX_3應選擇此子: -

[ ... SUB_STRING_TO_BE_SEARCHED ... ] ... [ .../... SUB_STRING_TO_BE_SEARCHED ... ] 

另一個示例: -

$str_3 = ' ... [ ... AA ... ] ... [ .../... AA ... ] ... [ ... B ... ] ... [ ... AA ... ] ... [ .../... AA ... ] ... [ ... AA ... ]'; 
$substring_3 = 'AA' 
$result = ' ... ... [ ... B ... ] ... ... '; 

回答

2

我會選擇否定班,而不是.*?,並在案件的​​是AA,則:

\[[^]]*?AA[^]]*?\](?:[^[]*\[[^]]*?/[^]]*?AA[^]]*?\])? 

在:

$result = preg_replace('#\[[^]]*?'.$sub_str.'[^]]*?\](?:[^[]*\[[^]]*?/[^]]*?'.$sub_str.'[^]]*?\])?#', '', $str); 

regex101 demo


\[   # Match [ 
    [^]]*? # Any number of non ] 
    AA  # The substr 
    [^]]*? # Any number of non ] 
\]   # Match ] 
(?: 
    [^[]*  # Any number of non [ 
    \[  # Match [ 
    [^]]*? # Any number of non ] 
    /  # Match/
    [^]]*? # Any number of non ] 
    AA  # The substr 
    [^]]*? # Any number of non ] 
    \]  # Match ] 
)?   # Make this group optional 
+0

這種美容!! –

+0

@OmarTariq好吧,如果你發現那樣的美麗...... :) – Jerry