PHP正则表达式-替换字符串中的子字符串

PHP正则表达式-替换字符串中的子字符串,php,regex,Php,Regex,例如,如果我有以下字符串: "Value1 *|VALUE_2|* Value3" 我希望能够从以chracters |开始并以|结束的字符串中删除任何子字符串。我不知道这些角色之间会发生什么,但这是无关的,因为我想删除它们之间的任何内容 基本上,我只是不确定在下面的代码中使用什么模式 preg_replace("*|PATTERN|*", "", $str); 我认为这应该能奏效 /U使模式解除冻结,以便在Value1 | VALUE | u2 | Value3 | test中,匹配将是|

例如,如果我有以下字符串:

"Value1 *|VALUE_2|* Value3"
我希望能够从以chracters |开始并以|结束的字符串中删除任何子字符串。我不知道这些角色之间会发生什么,但这是无关的,因为我想删除它们之间的任何内容

基本上,我只是不确定在下面的代码中使用什么模式

preg_replace("*|PATTERN|*", "", $str);
我认为这应该能奏效

/U
使模式解除冻结,以便在
Value1 | VALUE | u2 | Value3 | test
中,匹配将是
| VALUE | u2 | Value3 |
而不是o
| VALUE | u2 | Value3 |

如果只希望删除|之间的内容,可以执行以下操作:

preg_replace("/\|.*\|/U", "||", $str);
还有其他方法,但这将是最简单的一种

preg_replace('/|[^|]+|/', '', $str);

这应该可以做到。

|
是一个特殊字符,需要在正则表达式中转义:

preg_replace('/\|[^|]+\|/', '', $str);

谢谢你的详细答复。当我最初发布时,*字符已从示例中删除,因此示例应该是“Value1*| VALUE|u 2 |*Value3”,而不是“Value1 | VALUE|u 2 | Value3”。我认为这不会有什么区别<代码>*将匹配|'s@M42的答案是正确的,即需要转义
。相应地调整了代码。
preg_replace('/\|[^|]+\|/', '', $str);