我正在考虑使用双星号来模拟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>';
如何做这样的事情?
答案 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;
它不漂亮,但它有效。