有一个主字符串: -
" ... [ ... SUB_STRING_TO_BE_SEARCHED ... ] ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"
第1步:我需要搜索SUB_STRING_TO_BE_SEARCHED。
步骤2:然后移动到子字符串的左侧(忽略其间的任何内容),我会找到一个括号'['
步骤3:然后移动到子字符串的右侧(忽略其间的任何内容),我会找到一个括号']'
第4步:最后,我想选择这两个括号之间的所有内容并将其删除。
最终字符串: -
" ... ... [ ... THIS_SHOULD_NOT_GET_SELECTED ... ]"
答案 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 ... ]"
答案 1 :(得分:1)
此模式可用于查找括号中的字符串:
\[[^\]]*?SUB_STRING_TO_BE_SEARCHED.*?\]
其余的只是使用替换功能。