繁体   English   中英

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

[英]php regular expression find number and append area code to it

我有这样的字符串

一些字符串,其中数字模式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表示模式应该是自己的单词。 这告诉模式在这个位置应该有一个单词边界(一个空格,一个字符串的结尾,或者字符串的开头)

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

当你包含断言^$你的正则表达式模式正在寻找一个完整的匹配。 它只会匹配字符串,如果它只包含连字符分隔的数字。 此外,请注意您需要捕获此数字才能使用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);

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM