[英]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.