PHP preg_replace()中的正则表达式产生空结果

时间:2012-03-17 12:50:32

标签: php regex preg-replace

我正在努力使用简单转换此字符串所需的正则表达式语法:

posts/2012-03-16-23-07_an-awesome-post.md

进入这个字符串:

an-awesome-post

使用preg_replace() PHP函数。这是我到目前为止所得到的:

preg_replace('posts/[0-9-]*_([a-z-]*).md', '$1', 'posts/2012-03-16-23-07_an-awesome-post.md');

没有骰子。当我将结果分配给变量并且echo()输出该变量时,我什么也得不到。我的正则表达式语法有点生疏,但谷歌搜索一下让我觉得,至少,我走在正确的轨道上。

5 个答案:

答案 0 :(得分:7)

正则表达式需要被分隔符包围。

尝试'#posts/[0-9-]*_([a-z-]*).md#'作为$pattern(使用'#'作为分隔符)。

另外,您希望.与文字点匹配吗?然后必须通过反斜杠进行转义,如\.

答案 1 :(得分:1)

preg_replace('/posts\/[0-9-]*_([a-z-]*)\.md/', '$1', 'posts/2012-03-16-23-07_an-awesome-post.md');

答案 2 :(得分:1)

你能指望“an-awesome-post”之前的字符串始终是相同的长度吗? 扩展名一直是.md?

如果是这样,你可以只计算之前和之后的字符数并将其删除。

例如:

$string = substr($string, 23);
$string = substr($string, 0, -3);

答案 3 :(得分:1)

preg_replace('#posts/[0-9-]*_([a-z-]*).md#i', '$1', 'posts/2012-03-16-23-07_an-awesome-post.md');

答案 4 :(得分:1)

<?php
$str="posts/2012-03-16-23-07_an-awesome-post.md";
$pattern=array('/([^_]*_)/','/\.md/');
$replacement=array('','');
echo preg_replace($pattern, $replacement, $str);

&GT;