2017-04-04 49 views
1

我有一个字符串有'>>'。我试图用'测试>>>>'替换'test'>''。preg_replace两个箭头和空格

str_replace函数犯规更换任何东西,所以我已经尝试使用:

$string = preg_replace("/[\>\ \>]/",">>>>", $string); 

但这种替换字符串中的所有空格以及箭头。

所以串结束等的'test>>>>>>>>'代替'test >>>>'

+0

“str_replace不会取代任何东西” - 是的。事实上,它明确地表明它打算做什么。所以,当我支持你采取不同的方法时,当这种不同的方法失败时,你应该回到原始代码并提出一个问题:str_replace的语法要简单得多,而且能够在这里解决任务。正则表达式非常有用,但非常强大,难于理解并且容易出错*。 – symcbean

回答

1

/[\>\ \>]/正则表达式的单个字符要么是>,一个空格或>匹配和替换preg_replace多次出现(默认)。

如果没有特殊情况下的需求,你可以使用一个str_replace

$s = "test > >"; 
echo str_replace('> >', '>>>>', $s); 

PHP demo

如果你想只替换> >不是之后或之前与>,您可以尝试

echo preg_replace("/(?<!>)> >(?!\s*>)/",">>>>", $s); 

请参阅another PHP demoregex demo

如果>前面带有>和空间,(?!\s*>)先行将失败的比赛,如果这里有0+空格,接着与>> >(?<!>)回顾后会失败的比赛。

+0

你的答案是有效的,但是没有使用字符串,它对我的​​字符串有问题 – user3312792

+0

字符串是从数组中取出的,当我打印时我可以看到'>>'但str_replace或preg_replace不会找到带有空格的箭头,是有没有办法在我尝试之前清洁琴弦? – user3312792

+0

你的意思是你有一个很难的空间?然后使用'preg_replace(“/> \ s>/u”,“>>>>”,$ s);'。如果在'>'s之间可以有多于1个空格,则在'\ s'后面加'+'。如果你不想匹配'>',linebreak char,'>',用'\ h'替换'\ s'。 –

0
$input_lines = "I have a string which has '> >'. I am trying"; 
echo preg_replace("/(?<!>)> >(?!\s*>)/", "-----", $input_lines); 

输出将是: 我有有一个字符串 '----'。我正在尝试

preg_replace(REG_PATTERN,REPLACEMENT,INPUT_STRING);返回所需的输出。

它可以与任何具有'>>'的字符串一起使用,或者您的字符串中可能有双倍空间,您可以通过在正则表达式中增加>和>之间的空格来替换该字符串。 快乐编码。