Как отфильтровать эту строку "XX <i>\ r </i><i> \ n </i>" в XX? - PullRequest
1 голос
/ 14 июля 2010

Вопрос в названии. Я попытался strip_tags, но это выглядит пустым, и я попытался использовать preg_replace, но я не совсем понимаю синтаксис, очевидно ..

попробовал это

    $test = "Home<i>\r</i><i>\n</i>";       
$patterns = array();
$patterns[0] = '<i>';
$test = preg_replace($patterns, '', $test);

но echo $ test все тот же!

Ответы [ 3 ]

4 голосов
/ 14 июля 2010

, если вы хотите просто получить первую часть строки до первого тега, как насчет чего-то вроде:

$test = "Home<i>\r</i><i>\n</i>";
preg_match('/^[^<]+/', $test, $match);
echo $match[0];

, если вы хотите удалить все теги, это должно сделать strip_tags или выможно использовать preg_replace как:

$test = "Home<i>\r</i><i>\n</i>";
$test = preg_replace('/<[^>]+?>/', '', $test);
echo $test;
0 голосов
/ 14 июля 2010

Проблема с вашим синтаксисом в preg_replace () заключается в том, что вы не определили шаблон как точное регулярное выражение. Ваш метод будет работать, если вы используете str_replace (), но для preg_replace () правильный шаблон для идентификации <i> равен '/<i>/'. По сути, вам нужно заключить его в / символа, чтобы определить его как регулярное выражение.

Выражение Джонатана намного лучше, чем реализация шаблон за шаблоном, если вы хотите удалить все теги. Если нет, вы можете обрабатывать определенные теги, как это:

$test = "Home<i>\r</i><i>\n</i>";       
$patterns = array();
$patterns[0] = '/<\/?i>/'; //removes <i> and </i>
$patterns[1] = '/\r|\n/'; //removes \r and \n
$test = preg_replace($patterns, '', $test);
0 голосов
/ 14 июля 2010

strip_tags вернет XX \ r \ n, поэтому preg_replace, вероятно, будет тем, что вы ищете, если предположить, что он действительно может делать то, что вы хотите сделать , Я сам не знаю, удалит ли он теги так, как вы хотите, но если вы просто не понимаете синтаксис, прочитайте здесь .

Надеюсь, это поможет.

...