我想使用preg_replace从字符串中删除<?
的第一次出现以及 last 出现的?>
,但无论如何我试图逃避它们,它们总是会造成麻烦。
PHP代码
$string = preg_replace('/<?/', '', $string);
$string = preg_replace('/?>/', '', $string);
我应该在表达区域写什么?
答案 0 :(得分:3)
您可以使用:
$string = preg_replace('/^((?:(?!<\?).)*)<\?|\?>(?!.*?\?>)/s', '$1', $string);
或者很简单:
$string = preg_replace('/<\?(.*)\?>/s', '$1', $string);
PS:请注意,您也可以在不使用正则表达式的情况下执行此操作。使用PHP中的strpos
和strrpos
函数获取<?
的第一个位置和?>
的最后位置,然后使用substr
函数。
答案 1 :(得分:2)
您可以使用:
$str = preg_replace('~<\?(.*)\?>~s', '$1', $str);
但是如果您正在运行一个旧的PHP版本,可能会将?>
解释为结束标记。你可以使用这个技巧:
$str = preg_replace('~<\?(.*)\?'.'>~s', '$1', $str);