我正在努力使用简单转换此字符串所需的正则表达式语法:
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()
输出该变量时,我什么也得不到。我的正则表达式语法有点生疏,但谷歌搜索一下让我觉得,至少,我走在正确的轨道上。
答案 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;