2012-03-17 9 views
2

私は単純に、この文字列変換するために必要な正規表現の構文で苦労しています:正規表現は、空の結果が得られ

an-awesome-post 

preg_replace()を使用して:この文字列に

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

をPHP関数。これまで私がこれまで持っていたことは次のとおりです:

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

サイコロがありません。変数に結果を代入してその変数のecho()を得ると、何も得られません。私の正規表現の構文はちょっと錆びますが、ちょっと調べると、少なくとも私は正しい軌道に乗っていると思います。

答えて

7

正規表現は区切り文字で囲む必要があります。

$patternとして'#posts/[0-9-]*_([a-z-]*).md#'を試してください(デリミタとして '#'を使用)。

さらに、.をリテラルドットに一致させますか?その後、\.のようにバックスラッシュでエスケープする必要があります。

+0

あなたは神です。ありがとう!そして、結果のパターンに興味のある人は: ''#posts/[0-9 - ] * _([a-z - ] *)\。md#'' – Sam

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

"an-awesome-post"の前の文字列は常に同じ長さになると思いますか? 拡張子は常に.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); 

>

関連する問題