php正则表达式查找数字并向其附加区号

php正则表达式查找数字并向其附加区号,php,regex,Php,Regex,我有这样的绳子 某个字符串中的数字模式3-9485可能会多次出现,例如,另一个数字9-8465,其模式是一个数字和减号以及4个数字 我试过了 $str="sdf sdf sd fsd f sdf ds fds fsd f dss2 fsd fsd 3-9776 sdf sd fsd sdf"; $str = preg_replace("/^[0-9]{1}-[0-9]{4}$/",'99',$str); echo $str; 您的模式正在寻找仅作为模式的字符串。^表示字符串的开头,$表示字符串

我有这样的绳子

某个字符串中的数字模式3-9485可能会多次出现,例如,另一个数字9-8465,其模式是一个数字和减号以及4个数字

我试过了

$str="sdf sdf sd fsd f sdf ds fds fsd f dss2 fsd fsd 3-9776 sdf sd fsd sdf";
$str = preg_replace("/^[0-9]{1}-[0-9]{4}$/",'99',$str);
echo $str;

您的模式正在寻找仅作为模式的字符串。
^
表示字符串的开头,
$
表示字符串的结尾

使用
\b
显示模式应该是它自己的单词。这告诉模式在这个位置(空格、字符串的结尾或字符串的开头)应该有一个单词边界


在包含断言
^
$
时,您的正则表达式模式正在寻找完全匹配。仅当字符串仅包含以连字符分隔的数字时,它才会与字符串匹配。另外,请注意,您需要捕获此数字才能将其附加为99

$str = preg_replace("/([0-9]{1}-[0-9]{4})/", '${1}99', $str);
                      ^--   capture   --^     ^^^^-- backreference
这将匹配字符串中包含模式的部分。如果希望它仅在模式自身存在时匹配(即用空格分隔),可以将(
\b
)添加到正则表达式中。粗略地说,单词边界是单词字符(
\w
)和非单词字符(
\w
)之间的一个位置。但并非所有方言都是如此

更新后的正则表达式变为:

$str = preg_replace("/\b([0-9]{1}-[0-9]{4})\b/", '{$1}99', $str);
稍微清理一下,可以缩短为:

$str = preg_replace("/\b(\d-\d{4})\b/", '${1}99', $str);

它正在用99替换while号码,我想在号码后面加上99。将其更改为使用捕获组,它就会工作。@YourYummy:很高兴我能帮上忙。如果它解决了你的问题,那就麻烦你了!仅供参考:此模式还将匹配包含该模式的字符串的所有部分。像aa9-1234bbb@Schleis:接得好。更新了我的答案以反映这一点。
$str = preg_replace("/\b(\d-\d{4})\b/", '${1}99', $str);