preg_replace вопрос

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

Пример кода:

$str = '<p class="code">some string here</p>';

PHP, который я использую:

$pattern = array();
$pattern[0] = '!<p class="code">!';
$pattern[1] = '!</p>!';
preg_replace($pattern,"", $str);

Это удаляет код так, как я хочу, за исключением пробела между p и class.

Возвращает:

  some string here //notice the single space at the beginning.

Я пытаюсь получить:

some string here //no space at the beginning.

Я бился головой о стену, пытаясь найти решение. Причина, по которой я пытаюсь разбить его на куски вместо того, чтобы разбивать preg_replace на части, заключается в том, что я не хочу менять что-либо, что может быть в строке между тегами. Есть идеи?


person David    schedule 20.07.2011    source источник


Ответы (5)


У меня этого не происходит (и не должно быть).

Это может быть вывод пробела где-то еще (используйте var_dump() для просмотра строки).

person alex    schedule 20.07.2011
comment
Спасибо за комментарий. Хотелось бы, чтобы это было так просто, но я попробовал функцию trim(), и она обрезала не только пробел в начале строки, но и все остальные пробелы в строке. Я просто хочу обрезать это первое пространство и никаких других пробелов. - person David; 20.07.2011
comment
@David trim() удаляет только пробелы после пробела. - person alex; 20.07.2011
comment
Алекс, ты был прав, я попробовал свой код на чистой странице без css и т. Д., И начальное пространство отсутствует, поэтому я беру это место откуда-то еще. Спасибо за помощь. - person David; 20.07.2011

Возможно, вы захотите изучить этот поток, чтобы узнать, хотите ли вы переключиться на использование DOMDocument. Это избавит вас от головной боли при анализе HTML.

Надежный и проверенный анализатор HTML для PHP

person Edgar Velasquez Lim    schedule 20.07.2011

тестовое задание:

<?php
$str = '<p class="code">some string here</p>';

$pattern = array();
$pattern[0] = '!<p class="code">!';
$pattern[1] = '!</p>!';
$result = preg_replace($pattern,"", $str);
var_dump($result);

результат:

php pregrep.php                                                                  
string(16) "some string here"

кажется, работает просто отлично.

person Richard Hoffman    schedule 20.07.2011

Алекс, я понял, где я брал лишнее место.

Я помещал этот код в текстовую область следующим образом:

$str = '<p class="code">some string here</p>';
$pattern = array();
$pattern[0] = '!<p class="code">!';
$pattern[1] = '!</p>!';
$strip_str = preg_replace($pattern,"", $str);


<textarea id="code_area" class="syntaxhl" name="code" cols="66" rows="5">
 <?php echo $strip_str; ?>
</textarea>

Это дало мне дополнительное пространство, но когда я изменил код на:

<textarea id="code_area" class="syntaxhl" name="code" cols="66" rows="5"><?php echo $strip_str; ?></textarea>

Нет межстрочных пробелов или разрывов, лишнее пространство исчезло.

person David    schedule 20.07.2011

Почему бы не использовать trim()?

$text = trim($text);

Это удаляет пробелы вокруг строк.

person casraf    schedule 20.07.2011