php preg 替换数字
php preg replace numbers
我正在尝试为我的脚本中的数字构建一个 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("[=12=]") . " " . "[".""."]"', data)
因为我需要用 md5 替换那个数字并写下最后 3 位数字。
例如如果我有 3214567890 我需要得到
Number89467086c22e2cee9aae8dbf9c7f7453 [890]
preg_replace 完成了工作,但有 1 个问题。
我几天前发现的问题是,如果在源代码中我有一个包含很多数字的link,例如facebook link
https://www.facebook.com/groups/123456789123456789/
preg_replace 也详细说明并替换了 link 的数字,但我不需要触摸 links,我只需要转换分开的数字。
谁能帮帮我?
您可以使用单词边界 \b
:
'~\b3[0-9]{6}([0-9]{3})\b~'
或环视 (?<!\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);
我正在尝试为我的脚本中的数字构建一个 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("[=12=]") . " " . "[".""."]"', data)
因为我需要用 md5 替换那个数字并写下最后 3 位数字。
例如如果我有 3214567890 我需要得到
Number89467086c22e2cee9aae8dbf9c7f7453 [890]
preg_replace 完成了工作,但有 1 个问题。
我几天前发现的问题是,如果在源代码中我有一个包含很多数字的link,例如facebook link
https://www.facebook.com/groups/123456789123456789/
preg_replace 也详细说明并替换了 link 的数字,但我不需要触摸 links,我只需要转换分开的数字。
谁能帮帮我?
您可以使用单词边界 \b
:
'~\b3[0-9]{6}([0-9]{3})\b~'
或环视 (?<!\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);