我正在尝试在我的脚本中为数字构建一个preg替换。
我们有这个例子:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Integer lobortis luctus scelerisque. Curabitur 3214567890 dignissim finibus felis,
vitae vehicula ipsum vehicula a.
Maecenas tincidunt et metus vitae eleifend. Cras tellus eros, placerat
https://www.facebook.com/groups/123456789123456789/
我必须找到一个在文本源上写的数字,99%以3开头,它有10位数。
我写了这个简单的preg_replace
preg_replace('/3[0-9]{6}([0-9]{3})/e', '"Number" . md5("$0") . " " . "["."$1"."]"', data)
因为我需要用md5替换这个数字并写下最后3位数。
例如,如果我有3214567890,我需要
Number89467086c22e2cee9aae8dbf9c7f7453 [890]
preg_replace完成了这项工作,但它有一个问题。
我几天前发现的问题是,如果在源代码中我有很多数字的链接,例如,facebook链接
https://www.facebook.com/groups/123456789123456789/
preg_replace也详细阐述了它并替换了该链接的数量,但我不需要触摸链接,我只需要转换分开的数字。
任何人都可以帮助我吗?
答案 0 :(得分:2)
您可以使用字词边界\b
:
'~\b3[0-9]{6}([0-9]{3})\b~'
或lookarounds (?<!\d)
和(?!\d)
(仅在未附加其他数字时匹配):
'~(?<!\d)3[0-9]{6}([0-9]{3})(?!\d)~'
或者,如果您只想用空白符号括起来匹配数字,请使用
'~(?<!\S)3[0-9]{6}([0-9]{3})(?!\S)~'
然后,在代码中,您最好使用preg_replace_callback
,因为/e
修饰符已弃用:
preg_replace_callback('~(?<!\d)3[0-9]{6}([0-9]{3})(?!\d)~', function($m) {
return 'Number' . md5($m[0]) . ' [' . $m[1] . ']';
}, data);