如何使用正则表达式将文本样式更改为特定模式?

时间:2015-12-03 23:58:59

标签: javascript php regex

我有一个类似于stackoverflow的ask-page中的textarea。现在我想将一些文本替换为某些特定模式。换句话说,我想在文本周围添加一些标签。我想要这样的东西:

**bold**
__underline__
*italics*
--strike--
[linkname](www.example.com)

好吧,我是PHP的新手......但我是用javascript做的:

text.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>");
text.replace(/__(.*?)__/g, "<u>$1</u>");
text.replace(/\*(.*?)\*/g, "<i>$1</i>");
text.replace(/--(.*?)--/g, "<del>$1</del>");

// also I didn't know do that for link-href
// I want this: <a href="www.example.com">linkname</a>

那么,我怎么能用php做到这一点? (我想检查客户端和服务器端的内容,因为javacript可能在某些访问者的系统上被停用)

1 个答案:

答案 0 :(得分:1)

对于PHP,有一个名为preg_replace的函数,这是您要搜索的函数。

对于链接的第二个问题,您可以执行类似的操作,这样可以进行简单的检查,以确保URL有效。
(?:^\[)(.*?)(?:\]\()(www\..+?\.\D+?)(?:\))

更新1:
根据要求简单使用我的正则表达式:
    <?php $string = '[linkname](www.example.com)'; $pattern = '/(?:^\[)(.*?)(?:\]\()(www\..+?\.\D+?)(?:\))/'; $replacement = '${1}, $2'; echo preg_replace($pattern, $replacement, $string);

为了更轻松地完成所有这些操作,您可以使用此PHP类:(由@ miken32建议):
https://github.com/erusev/parsedown/blob/master/Parsedown.php#L1171