用字符串替换包含**符号的字符串中的所有部分**?

时间:2011-04-27 05:35:32

标签: php markdown

我正在考虑使用双星号来模拟stackoverflow中使用的功能。

假设你有一个像这样的变量:

$string = 'hello i am **a string** and i have **stuff in me**';

我想通过这个字符串并用其他东西替换用双星号(**)包装的任何东西。在我的情况下,它用一个链接将所有东西包裹在那些星号中。

$link = 'http://www.something.com';

$ string的最终结果如下:

$string = 'hello i am <a href="http://www.something.com">a string</a> and i have <a href="http://www.something.com">stuff in me</a>';

如何做这样的事情?

4 个答案:

答案 0 :(得分:3)

$newString = preg_replace(
    '/\*\*(.*?)\*\*/',
    '<a href="http://www.something.com/">$1</a>',
    $string
);

为了解释,该模式匹配一​​个双星号,后跟任何一个到下一个双星号,捕获一个组中的“任何东西”。

替换然后使用$1

引用该组

答案 1 :(得分:1)

试用正则表达式

echo preg_replace('/\*\*(.*?)\*\*/','<a href="http://www.google.com">${1}</a>',$your_string);

答案 2 :(得分:1)

为什么不简单地使用PHP Markdown library而不是自己动手呢?我自己用过,很容易。将它与StackOverflow(link)上使用的基于Javascrip的Markdown预览配对,你就完全了!

答案 3 :(得分:0)

这是一个快速而肮脏的答案:

$string = 'hello i am **a string** and i have **stuff in me** and here **is some more**';
$string_parts = explode( '**', $string );
$final_string = '';
$wraps[0] = '<a href="http://www.something.com">';
$wraps[1] = '</a>';
$x = 0;
foreach( $string_parts as $index => $string_part ){
    if( $index == count($string_parts) - 1 ){
        break;
    }
    $final_string .= $string_part . $wraps[$x];
    $x++;
    if( $x > 1 ){
        $x = 0;
    }
}
echo $final_string;

它不漂亮,但它有效。