preg_replace转义<! - ?和? - >

时间:2014-10-14 21:45:33

标签: php regex

我想使用preg_replace从字符串中删除<?第一次出现以及 last 出现的?>,但无论如何我试图逃避它们,它们总是会造成麻烦。

PHP代码

$string = preg_replace('/<?/', '', $string);
$string = preg_replace('/?>/', '', $string);

我应该在表达区域写什么?

2 个答案:

答案 0 :(得分:3)

您可以使用:

$string = preg_replace('/^((?:(?!<\?).)*)<\?|\?>(?!.*?\?>)/s', '$1', $string);

RegEx Demo

或者很简单:

$string = preg_replace('/<\?(.*)\?>/s', '$1', $string);

PS:请注意,您也可以在不使用正则表达式的情况下执行此操作。使用PHP中的strposstrrpos函数获取<?的第一个位置和?>的最后位置,然后使用substr函数。

答案 1 :(得分:2)

您可以使用:

$str = preg_replace('~<\?(.*)\?>~s', '$1', $str);

但是如果您正在运行一个旧的PHP版本,可能会将?>解释为结束标记。你可以使用这个技巧:

$str = preg_replace('~<\?(.*)\?'.'>~s', '$1', $str);