Существует основная строка: –
" ... [ ... SUB_STRING_TO_BE_SEARCHED ... ] ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"
Шаг 1: Мне нужно найти SUB_STRING_TO_BE_SEARCHED.
Шаг 2: Затем переместитесь влево от подстроки (пренебрегая чем-либо между ними), и я найду скобку '['
Шаг 3: Затем перейдите вправо от подстроки (пренебрегая чем-либо между ними), и я найду скобок ']'
Шаг 4: Наконец, я хочу выбрать все между этими двумя скобками и удалить его.
Конечная строка: –
" ... ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"
$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
Этот шаблон можно использовать для поиска строки в квадратных скобках:
\[[^\]]*?SUB_STRING_TO_BE_SEARCHED.*?\]
Остальное будет просто использовать функцию замены.