2017-04-04 18 views
1

私は '>'という文字列を持っています。私は 'test>' 'を' test >>>> 'に置き換えようとしています。preg_spaceに2つの矢印を置き換えます。

str_replaceは何を交換doesntの、私は使用して試してみました:

$string = preg_replace("/[\>\ \>]/",">>>>", $string); 

をしかし、これは、文字列内のすべてのスペースだけでなく、矢印を置き換えます。

ように文字列が'test>>>>>>>>'代わりの'test >>>>'

+0

"str_replaceは何も置き換えません" - そうです。確かにそれは意図されていることです。だから私はあなたが別のアプローチを取ることを支持していますが、その異なるアプローチが失敗したときには、元のコードに戻って、それに関する質問をしてください:str_replaceの構文はずっと簡単で、正規表現は非常に便利ですが、*非常に強力で、理解しにくく、間違ってしまうのが簡単です*。 – symcbean

答えて

1

のように終わる/[\>\ \>]/正規表現のいずれかである>、スペースまたは>preg_replaceは(デフォルトでは)複数の発生を置き換え、単一の文字に一致します。

は特定のコンテキストの要件が存在しない場合は、あなただけ続くか>で先行していない> >を交換したい場合は、

を試すこと PHP demo

を参照してくださいstr_replace

よう
$s = "test > >"; 
echo str_replace('> >', '>>>>', $s); 

を使用することができます

echo preg_replace("/(?<!>)> >(?!\s*>)/",">>>>", $s); 

another PHP demoおよびregex demo>>スペースで先行され、そしてここで空白が> >>に続い0+ある場合(?!\s*>)先読みはマッチを失敗した場合

(?<!>)後読みが一致して失敗します。

+0

あなたの答えは動作しますが、使用している文字列ではなく、文字列に問題があります – user3312792

+0

文字列が配列から取り出され、印刷されたときに '>' 'は見えますが、str_replaceまたはpreg_replaceは空白私はこれを試す前に文字列をきれいにする方法がありますか? – user3312792

+0

ハード・スペースがあるのですか?それから 'preg_replace(" /> \ s>/u "、" >>>> "、$ s);'を使います。 '>'の間に1つ以上の空白がある場合は、 '\ s'の後に' + 'を追加してください。 '>'、linebreak char、 '>'にマッチさせたくない場合は、 '\ s'を' \ h'に置き換えてください。 –

0
$input_lines = "I have a string which has '> >'. I am trying"; 
echo preg_replace("/(?<!>)> >(?!\s*>)/", "-----", $input_lines); 

出力は次のようになります。 私は「----」を持っている文字列を持っています。私は試しています

preg_replace(REG_PATTERN、REPLACEMENT、INPUT_STRING);目的の出力を返します。

">>"を持つ任意の文字列で動作するか、文字列に二重のスペースがある場合は、正規表現で>と>の間のスペースを増やすことで置き換えることができます。 ハッピーコーディング。

関連する問題