2011-01-05 9 views
1

私はpreg_replace-PHPを初めて使っていて、ただ今それを学んでいます... 特定の文字を変更するには、前と後の文字が英字である必要があります。ターゲット文字は単語の一部であり、開始文字または終了文字ではない。例については文字列の途中から文字を置換する

...

$string = "I am learn*ing *PHP today*"; 

私はこの文字列は、次のように変換することにしたいです。

$newString = "I am learn'ing *PHP today*"; 

答えて

2
$string = "I am learn*ing *PHP today*"; 
$newString = preg_replace('/(\w)\*(\w)/', '$1\'$2', $string); 

// $newString = "I am learn'ing *PHP today* " 

これは単語文字(文字、数字、アンダースコア)に囲まれたアスタリスクにマッチします。あなたが唯一のアルファベット文字を行いたい場合は、あなたが行うことができます:

preg_replace('/([a-zA-Z])\*([a-zA-Z])/', '$1\'$2', 'I am learn*ing *PHP today*'); 
+0

これは、最初の発生を置き換えます。 "私はPHPを*日に習う"のような文字列はどうですか? – Chandu

+0

Cyber​​nateが間違っています。それはすべての出現を置き換えます。 – webbiedave

+0

OPの例は最初のものだけを置き換えるので、最初のものだけを置き換える方法について言及する価値はあるかもしれませんが。 – marcog

-1

はアルファベットのみを交換するには、正規表現は大文字と小文字を区別しないにするために、文字の範囲として[AZ]を使用して、iフラグを使用する必要があります。あなたが置きたい文字はアスタリスクであるため、アスタリスクは正規表現で「0回以上一致」を意味するため、バックスラッシュでエスケープする必要があります。手紙に囲まれastericのすべての回出てくる交換するには

$newstring = preg_replace('/([a-z])\*([a-z])/i', "$1'$2", $string); 
-1

....

$文字列=にpreg_replace( '/(\ w)を*(\ W)/'、 '$ 1 \' $ 2' 、 $ string);

がastericを開始し、単語の最後の文字であるastericのすべての回出てくる交換するには....

$文字列=にpreg_replace( '/ *(\)+ W * /'、」 \ '$ 1 \' '、$ string);

関連する問題