2011-07-20 70 views
1

我正在尝试使用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和类之间的空间异常的代码。

返回:

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

我试图让:

some string here //no space at the beginning. 

我一直在打我的头撞在墙上试图找到一个解决方案。我试图将它拆成块的原因,而不是将preg_replace分解成块,原因是我不想更改标记之间的字符串中的任何内容。有任何想法吗?

回答

1

That does not happen for me(它不应该)。

它可能是其他地方的空间输出(使用var_dump()来查看字符串)。

+0

感谢您的评论。我希望它很简单,但我试过trim(),它不仅修剪了字符串开头的空格,而且修剪了字符串中的所有其他空格。我只想要修剪第一个空间而没有其他空间。 – David

+0

@David'trim()'只能去掉尾部和留下空白。 – alex

+0

亚历克斯你是对的我在没有CSS的干净的页面上尝试我的代码等,并且缺少开始空间,所以我从其他地方捡起该空间。谢谢您的帮助。 – David

0

你可能想看看这个线程,看看你是否要切换到使用DOMDocument。它会为您解决大量令人头疼的问题,从而解决HTML问题。

Robust and Mature HTML Parser for PHP

0

测试:

<?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" 

似乎工作就好了。

0

亚历克斯我想出了我在哪里拿起额外的空间。

我把这些代码转换为文本区域是这样的:

$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> 

没有行空格或打破额外的空间消失了。

0

为什么不使用trim()

$text = trim($text); 

这将删除字符串周围的空白。