2017-04-13 70 views
1

内结束引号我有一个文本字符串如下:查找开始和一个字符串

The nice man said "How's things today" and I replied "All is good thanks". 

我想换成双引号fontawesome图标。如果我做一个字符串替换双qoutes它工作正常。但正如预期的那样,这只是给了我一个字符串中每个双引号的通用左手引号。

我当前的代码:

$str = The nice man said "How's things today" and I replied "All is good thanks". 

$str = str_replace('"', '<i class="fa fa-quote-left" aria-hidden="true"></i>'); 

输出:

The nice man said <i class="fa fa-quote-left" aria-hidden="true"></i>How's things today<i class="fa fa-quote-left" aria-hidden="true"></i> and I replied <i class="fa fa-quote-left" aria-hidden="true"></i>All is good thanks<i class="fa fa-quote-left" aria-hidden="true"></i>. 

所需的输出:

The nice man said <i class="fa fa-quote-left" aria-hidden="true"></i>How's things today<i class="fa fa-quote-right" aria-hidden="true"></i> and I replied <i class="fa fa-quote-left" aria-hidden="true"></i>All is good thanks<i class="fa fa-quote-right" aria-hidden="true"></i>. 


示例输出: http://jsfiddle.net/JfGVE/1975/

+1

OP首先不处理HTML。 @Jens – revo

+0

你的输出和预期的外观是一样的吗? –

+1

@SahilGulati - 他们没有。第一个对所有引号都有'fa-quote-left',而最后一个对所有右引号都有'fa-quote-right'。 –

回答

4

如果你确信双引号那里一样是我们目标字符串中看到(平衡,里面没有逃脱双引号),然后一个正则表达式将做的工作:

echo preg_replace('~(")([^"]+)(")~', '<i class="fa fa-quote-left" aria-hidden="true"></i>\\2<i class="fa fa-quote-right" aria-hidden="true"></i>', $str); 

Live demo

+1

非常感谢。你能解释一下这个模式在做什么吗? – steve

+1

正则表达式试图从输入字符串中查找并捕获三个部分:1-双引号(开局)2-除双引号之外的所有内容3-再次双引号(结束)。然后,通过'preg_replace()'函数的替换参数,它将替换第一个和第三个捕获组并保持中间部分完好无损。 – revo

相关问题