老实说,我非常喜欢正则表达式,我会使用RegexBuddy,但我正在使用我的Mac,有时对我来说没有多大帮助(对我而言)。
好吧,我需要做的是php中的一个函数
function replaceTags($n)
{
$n = str_replace("[[", "<b>", $n);
$n = str_replace("]]", "</b>", $n);
}
虽然这是一个不好的例子,如果有人没有通过使用]]或[[[,无论如何,你能帮助正则表达式来关闭标记:
[[]] = 粗体格式
** ** = 斜体格式
(())= h2标题
这些都是我需要的,谢谢:)。
P.S - 有没有像RegexBuddy这样的软件适用于Mac(Snow Leopard)?
答案 0 :(得分:2)
function replaceTags($n)
{
$n = preg_replace("/\[\[(.*?)\]\]/", "<strong>$1</strong>", $n);
$n = preg_replace("/\*\*(.*?)\*\*/", "<em>$1</em>", $n);
$n = preg_replace("/\(\((.*?)\)\)/", "<h2>$1</h2>", $n);
return $n;
}
我应该提供一些解释:每个特殊字符前面都有一个反斜杠,因此它不被视为正则表达式指令(“[”,“(”等)。“(。*?)”捕获所有字符在你的分隔符之间(“[[”和“]]”等。)然后在替换字符串中输出所捕获的内容而不是“$ 1”。
答案 1 :(得分:1)
使用str_replace()
无法执行此操作的原因同样适用于preg_replace()
。标记对样式解析需要词法分析器/解析器,如果您想要产生100%的准确率并覆盖输入错误。
正则表达式无法处理未闭合的标签,嵌套标签等等。
总而言之,只需很少的努力就可以获得50%的成功。
$test = "this is [[some]] test [[content for **you** to try, ((does [[it]])) **work?";
echo convertTags( $test );
// only handles validly formatted, non-nested input
function convertTags( $content )
{
return preg_replace(
array(
"/\[\[(.*?)\]\]/"
, "/\*\*(.*?)\*\*/"
, "/\(\((.*?)\)\)/"
)
, array(
"<strong>$1</strong>"
, "<em>$1</em>"
, "<h2>$1</h2>"
)
, $content
);
}
答案 2 :(得分:0)
修饰符也可以提供帮助:)
http://lv.php.net/manual/en/reference.pcre.pattern.modifiers.php
U (PCRE_UNGREEDY)此修饰符 颠倒了“贪婪” 量词使他们不是 贪婪默认,但变得贪婪 如果紧接着?它不兼容 与Perl。它也可以由a设置 (?U)内的修饰符设置 模式或背后的问号 量词(例如*?)。