php正则表达式查找数字并将区域代码附加到它

时间:2014-04-07 13:20:25

标签: 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;

2 个答案:

答案 0 :(得分:1)

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

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

$str = preg_replace("/\b([0-9]{1}-[0-9]{4})\b/",'{$1}99',$str);

答案 1 :(得分:1)

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

$str = preg_replace("/([0-9]{1}-[0-9]{4})/", '${1}99', $str);
                      ^--   capture   --^     ^^^^-- backreference

如果包含模式,则匹配字符串的部分。如果您希望它仅在模式本身存在时匹配(即由空格分隔),则可以将word boundaries\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);

Demo