我有一大段文字,在那个文字中有几次这样的文字201014120 - 10
。还有带有正常连字符 (-) 的文本。
我想要做的是用逗号替换两个数字之间的连字符,,
但不替换文本中的任何其他连字符。我想用 PHP 的preg_replace
.
数字不相同,并且每个数字的长度对于所有文本都不会相同。
我尝试了不同类型的正则表达式,包括代码和这个非常好的网站。
我有一大段文字,在那个文字中有几次这样的文字201014120 - 10
。还有带有正常连字符 (-) 的文本。
我想要做的是用逗号替换两个数字之间的连字符,,
但不替换文本中的任何其他连字符。我想用 PHP 的preg_replace
.
数字不相同,并且每个数字的长度对于所有文本都不会相同。
我尝试了不同类型的正则表达式,包括代码和这个非常好的网站。
尝试:
$str='e-mail 201014120 - 10 e - mail 201014120-10';
echo preg_replace('/(\d+\s*)-(\s*\d+)/','${1},${2}',$str);
>>> e-mail 201014120 , 10 e - mail 201014120,10
比赛(\d+\s*)-(\d+\s*)
:
\d+ # One or more digits
\s* # Zero or more white space characters
- # Literal hypen
() # Capture group
代替${1},${2}
${1} # The first captured group
, # A literal comma
${2} # The second captured group
您可以使用环视来确保只匹配由数字包围的连字符:
preg_replace('/(?<=\d)\s*-\s*(?=\d)/', ', ', $input);
(?<=\d)
是积极的向后看:它只允许正则表达式匹配,如果它前面有一个数字。反之,(?=\d)
则是积极的前瞻。正则表达式将匹配(并因此替换)连字符周围的任何空格。
未经测试:
preg_replace("/(\d+)-(\d+)/g","$1,$2",$text);
或者,如果您的文本如所述“数字”“空白”“连字符”“空白”“数字”
preg_replace("/(\d+\w*)-(\w*\d+)/g","$1,$2",$text);
<?php
$string = '201014120 - 10';
$pattern = '/(\d+) - (\d+)/';
$replacement = '$1,$2';
echo preg_replace($pattern, $replacement, $string);
?>