8

検索と置換を実行しようとしている単純なパターンがあります。ダッシュが数字で囲まれている場合は、すべてのダッシュをピリオドに置き換える必要があります。

これらのピリオドを置き換えます。

3-54
32-11
111-4523mhz

そのようです:

3.54
32.11
111.4523mhz

ただし、次のようなものの中のダッシュを置き換えたくありません。

Example-One
A-Test

私は以下を使用してみました:

preg_replace('/[0-9](-)[0-9]/', '.', $string);

ただし、これはマッチの途中だけでなく、マッチ全体を置き換えます。マッチの一部だけをどのように置き換えますか?

4

4 に答える 4

13
preg_replace('/([0-9])-([0-9])/', '$1.$2', $string);

トリックを行う必要があります:)

編集:もう少し説明:

()を正規表現で使用することにより、グループを作成します。そのグループは、置換で使用できます。$1最初に一致したグループに$2置き換えられ、2番目に一致したグループに置き換えられます。

つまり、(たとえば)に変更'$1.$2'する'$2.$1'と、操作によって2つの数値が入れ替わります。それはあなたの場合には役に立たない振る舞いですが、おそらくそれはあなたが原理をよりよく理解するのを助けるでしょう。

于 2012-05-17T14:51:53.627 に答える
2

使用している正規表現の実装に応じて、キャプチャしないグループを使用できます。

preg_replace('/(?<=[0-9])-(?=[0-9])/', '.', $string);
于 2012-05-17T14:53:00.543 に答える
0

後方参照を使用して、保持したい一致の部分を保持できます。

preg_replace('/([0-9])-([0-9])/', '$1.$2', $string);
于 2012-05-17T14:52:21.600 に答える