Php 删除括号内的字符串

Php 删除括号内的字符串,php,regex,preg-replace,Php,Regex,Preg Replace,你好 我想在删除方括号内的字符串以及包括方括号时得到一些帮助 字符串如下所示: $string=“Lorem ipsum dolor[可在www.example.com上找到上下文]此处有一些文本。此处有文本。[测试]Lorem ipsum dolor。“ 我只想删除包含“www.example.com”的括号及其内容。我想在字符串中保留“[test]”,任何其他括号中都没有“www.example.com” 谢谢 使用类似于/\[.*?\]/的正则表达式。反斜杠是必需的,否则它将尝试匹配任何单

你好

我想在删除方括号内的字符串以及包括方括号时得到一些帮助

字符串如下所示:

$string=“Lorem ipsum dolor
[可在www.example.com上找到上下文]
此处有一些文本。此处有文本。[测试]Lorem ipsum dolor。“

我只想删除包含“www.example.com”的括号及其内容。我想在字符串中保留
“[test]”
,任何其他括号中都没有
“www.example.com”


谢谢

使用类似于
/\[.*?\]/
的正则表达式。反斜杠是必需的,否则它将尝试匹配任何单个字符
*

使用类似
/\[.\]/
的正则表达式。反斜杠是必需的,否则它将尝试匹配任何单个字符
*

$str=“Lorem ipsum dolor
[上下文可在www.example.com上找到]
此处的一些文本。此处的文本。[测试]Lorem ipsum dolor;
$str = "Lorem ipsum dolor<br /> [ Context are found on www.example.com ] <br />some text here. Text here. [test] Lorem ipsum dolor.";
$str = preg_replace('~\[[^]]*?www\.example\.com[^]]*\]~si', "", $str);
var_dump($str);
$str=preg\u replace(“~\[^]]*?www\.example\.com[^]*\]~si',”,$str); var_dump($str);
输出
string(83)“Lorem ipsum dolor

这里有一些文本。这里有文本。[测试]Lorem ipsum dolor。”
PS:它可以在多行中使用换行符。

$str=“Lorem ipsum dolor
[可在www.example.com上找到上下文]
此处有一些文本。此处有文本。[测试]Lorem ipsum dolor。“; $str=preg\u replace(“~\[^]]*?www\.example\.com[^]*\]~si',”,$str); var_dump($str);
输出
string(83)“Lorem ipsum dolor

这里有一些文本。这里有文本。[测试]Lorem ipsum dolor。”

PS:它可以处理多行中的换行。

我能想到的最简单的方法是使用正则表达式计算
[
]
之间的所有内容,然后将其替换为
。下面的代码将替换示例中使用的字符串。如果需要删除的实际字符串更复杂,则可以更改正则表达式以匹配。我建议使用测试正则表达式


$string=preg\u replace(“\[[A-Za-z.]*\]”,“”,$string)

我能想到的最简单的方法是使用正则表达式计算
[
]
之间的所有内容,然后将其替换为
。下面的代码将替换示例中使用的字符串。如果需要删除的实际字符串更复杂,则可以更改正则表达式以匹配。我建议使用测试正则表达式


$string=preg\u replace(“\[[A-Za-z.]*\]”,“”,$string)

以下代码将

更改为换行符:

$str = "Lorem ipsum dolor<br />[ Context are found on www.example.com ] <br />some text here";
$str = preg_replace( "/\[[^\]]*\]/m", "", $str);
echo $str;
$str=“Lorem ipsum dolor
[可在www.example.com上找到上下文]
此处有一些文本”; $str=preg\u replace(“/\[^\]]*\]/m”,”,$str); echo$str;
输出:

同侧阴唇

这里有一些文字


以下代码将

更改为换行符:

$str = "Lorem ipsum dolor<br />[ Context are found on www.example.com ] <br />some text here";
$str = preg_replace( "/\[[^\]]*\]/m", "", $str);
echo $str;
$str=“Lorem ipsum dolor
[可在www.example.com上找到上下文]
此处有一些文本”; $str=preg\u replace(“/\[^\]]*\]/m”,”,$str); echo$str;
输出:

同侧阴唇

这里有一些文字


注意:OP极大地改变了这个问题。此解决方案旨在以原始(更难的)形式(在添加“www.example.com”约束之前)处理问题。尽管以下解决方案已被修改以处理此附加约束,但更简单的解决方案现在可能就足够了(即anubhava的答案)

这是我经过测试的解决方案:

带括号的功能条专用($text){
$re='%#删除标记中包含“www.example.com”的括号内文本。
#跳过注释、CDATA、脚本和样式元素以及HTML标记。
(#$1:HTML的东西就不用管了。
#HTML注释(不符合SGML)。
|#CDATA部分

|注意:OP极大地改变了问题。此解决方案旨在以其原始(更难的)形式处理问题(在添加“www.example.com”约束之前)。尽管以下解决方案已被修改以处理此附加约束,但更简单的解决方案现在可能就足够了(即anubhava的回答)

这是我经过测试的解决方案:

带括号的功能条专用($text){
$re='%#删除标记中包含“www.example.com”的括号内文本。
#跳过注释、CDATA、脚本和样式元素以及HTML标记。
(#$1:HTML的东西就不用管了。
#HTML注释(不符合SGML)。
|#CDATA部分

|不需要使用e选项(邪恶),但ungreedy选项应该很有用here@soju:否
e
选项,这是一个复制/粘贴错误。我在这里发布后立即将其删除。@Viswanathan Iyer:此代码只是将
[
]之间的所有内容删除
包括方括号。任何地方都没有到下线转换的

。@anubhava在输出中只显示“Lorem ipsum dolor[newlien]此处的一些文本”非常感谢您的快速回复。很抱歉,我想保留括号中的一些字符串。我只想删除括号及其包含www.example.com的内容。我将如何完成?谢谢!无需使用e选项(邪恶),但ungreedy选项应该很有用here@soju:否
e
选项,这是一个复制/粘贴错误。我在这里发布后立即将其删除。@Viswanathan Iyer:此代码只是将
[
]
之间的所有内容(包括方括号)删除。没有