1

文字列内のすべてのスラッシュを「%」に置き換えるために使用str_replace()してから、新しく編集した文字列を関数で実行します。この関数が行うことの 1 つは、文字列に '%%%' を追加することです。

ここで、以前はスラッシュだった前に置き換えたパーセント記号のみを再びスラッシュに置き換える必要があります。

したがって、元の文字列が次のようになっている場合: ' the/wuick/bornw/foc/jumps/over/the/lazy/dog.'

The%quick%brown%fox%jumps%over%the/lazy%dog.%%%関数に渡すと、次のようになります。

そして、助けが必要な部分にそれを通すと、次のようになります: ' The/quick/brown/fox/jumps/over/the/lazy/dog.%%%'

以前に行った % のみを置き換えるすべての助けをいただければ幸いstr_replace()です。

4

3 に答える 3

4

単一の%記号をスラッシュに置き換えるには、次を使用できます

$result = preg_replace('/(?<!%)%(?!%)/', '/', $subject);

これは、否定的なルックアラウンド アサーション%を使用して、別の記号が前後にない記号のみが一致することを確認し%ます。

regex101.comでご覧ください。

于 2013-06-14T21:46:28.260 に答える
0

あまり複雑にせずに、次の順序で実行します。

$str = 'The%quick%brown%fox%jumps%over%the/lazy%dog.%%%';
$str= str_replace('%%%','***triple_percent**', $str);
$str= str_replace('%','/', $str);
$str= str_replace('***triple_percent**','%%%', $str);

理想的には、最初に % が非常に多い理由を確認してください。関数を単純化できると確信しています。

別の解決策は、ティムが答えで言っているように正規表現を使用することです

$str= preg_replace('/(?<!%)%(?!%)/', '/', $str);

分解とは、次のことを意味します。

(?<!%)     Not % before
%          find %
(?!%)      Not % after

g も追加して、何度も検索できるようにします。i は、必要な場合に大文字と小文字を区別します。

$str= preg_replace('/(?<!%)%(?!%)/ig', '/', $str);
于 2013-06-14T21:47:21.527 に答える