通过Regex替换匹配中的单个字符

Dav*_*e C 5 regex

我有一个简单的模式,我试图找到并替换.它需要用数字包围的句点替换所有短划线.

替换这些期间:

3-54
32-11
111-4523mhz
Run Code Online (Sandbox Code Playgroud)

喜欢如此:

3.54
32.11
111.4523mhz
Run Code Online (Sandbox Code Playgroud)

但是,我不想在这些内容中替换破折号:

Example-One
A-Test
Run Code Online (Sandbox Code Playgroud)

我尝试过使用以下内容:

preg_replace('/[0-9](-)[0-9]/', '.', $string);
Run Code Online (Sandbox Code Playgroud)

但是,这将取代整个比赛,而不仅仅是中间.你怎么只替换比赛的一部分?

soi*_*mon 10

preg_replace('/([0-9])-([0-9])/', '$1.$2', $string);
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩:)

编辑:更多解释:

通过使用()在正则表达式中,您可以创建一个组.该组可用于替换.$1替换为第一个匹配的组,$2替换为第二个匹配的组,依此类推.

这意味着如果您(仅举例)更改'$1.$2''$2.$1',则操作将交换这两个数字.在您的情况下,这不是有用的行为,但也许它可以帮助您更好地理解原则.