需要帮助在Regex中,两个括号之间的子串

时间:2014-03-31 18:18:47

标签: php regex

有一个主字符串: -

" ... [ ... SUB_STRING_TO_BE_SEARCHED ... ] ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"

第1步:我需要搜索SUB_STRING_TO_BE_SEARCHED。

步骤2:然后移动到子字符串的左侧(忽略其间的任何内容),我会找到一个括号'['

步骤3:然后移动到子字符串的右侧(忽略其间的任何内容),我会找到一个括号']'

第4步:最后,我想选择这两个括号之间的所有内容并将其删除。

最终字符串: -

" ...  ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"

2 个答案:

答案 0 :(得分:5)

$string = " ... [ ... SUB_STRING_TO_BE_SEARCHED ... ] ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]";

$string = preg_replace('#\[.*?SUB_STRING_TO_BE_SEARCHED.*?\]#', '', $string);

var_dump($string);

如果您想要更强大的解决方案,可以使用外观:

(                               # group and capture to $1
    \[                          # match '['
    (?<=                        # look behind to see if there is
      \[                        # '['
    )                           # end of look-behind
    [^\[\]]*                    # any character except: '\[', '\]' (0 or more)
    SUB_STRING_TO_BE_SEARCHED   # 'SUB_STRING_TO_BE_SEARCHED'

    [^\[\]]*                    # any character except: '\[', '\]' (0 or more)
    (?=                         # look ahead to see if there is
      \]                        # ']'
    )                           # end of look-ahead
    \]                          # ']'
  )                             # end of capturing group 1
)

输出:

string(50) " ...  ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"

Regex101 Demo

答案 1 :(得分:1)

此模式可用于查找括号中的字符串:

\[[^\]]*?SUB_STRING_TO_BE_SEARCHED.*?\]

其余的只是使用替换功能。