2012-03-17 82 views
2

我用簡單此字符串轉換所需要的正則表達式語法掙扎:正則表達式產生空的結果

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'); 

沒有骰子。當我將結果分配給一個變量並將該變量分配給該變量時,我什麼也得不到。我的正則表達式語法有點生疏,但是Google搜索一下讓我覺得,至少我正處在正確的軌道上。

回答

7

正則表達式需要被分隔符包圍。

嘗試'#posts/[0-9-]*_([a-z-]*).md#'作爲您的$pattern(使用'#'作爲分隔符)。

另外,你希望.匹配一個文字點嗎?然後它必須被反斜線轉義,如\.

+0

你是神。謝謝!對於那些對結果模式感興趣的人,它是: '#posts/[0-9 - ] * _([a-z - ] *)\。md#'' – Sam 2012-03-17 13:06:49

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

你可以期待「的,真棒-郵報」始終是相同的lenght前的字符串? 而擴展名一直是.md?

如果是這樣,您可以只計算前後字符的數量並將其刪除。

?例如:

$string = substr($string, 23); 
$string = substr($string, 0, -3); 
1
preg_replace('#posts/[0-9-]*_([a-z-]*).md#i', '$1', 'posts/2012-03-16-23-07_an-awesome-post.md'); 
1
<?php 
$str="posts/2012-03-16-23-07_an-awesome-post.md"; 
$pattern=array('/([^_]*_)/','/\.md/'); 
$replacement=array('',''); 
echo preg_replace($pattern, $replacement, $str); 

>