在PHP中用regexp替换任意数量的字符

在PHP中用regexp替换任意数量的字符,php,regex,Php,Regex,我有一个里面有数字序列的字符串-它们前面有一些特殊的前缀,并且受非数字符号的限制,如下所示: Vechny Zov,Sholokhov1970.IBSN:123456-m15p243 replace /(?<=IBSN\:\d*)\d/, '*' 我很好奇如何用相同长度的星号序列替换这一数字子序列: Vechny Zov,Sholokhov1970.IBSN:******-m15p243 其他数字不应受到影响。借助可变宽度的后视,可以很容易地做到这一点,如下所示: Vechny Zo

我有一个里面有数字序列的字符串-它们前面有一些特殊的前缀,并且受非数字符号的限制,如下所示:

Vechny Zov,Sholokhov1970.IBSN:123456-m15p243
replace /(?<=IBSN\:\d*)\d/, '*'
我很好奇如何用相同长度的星号序列替换这一数字子序列:

Vechny Zov,Sholokhov1970.IBSN:******-m15p243
其他数字不应受到影响。借助可变宽度的后视,可以很容易地做到这一点,如下所示:

Vechny Zov,Sholokhov1970.IBSN:123456-m15p243
replace /(?<=IBSN\:\d*)\d/, '*'
replace/(?)?
试试这个。这关系到*的确切数量

见演示


您可以使用下面的正则表达式

(?:(.*IBSN:|-.*)|^(?:(?!ISBN).)*$)(*SKIP)(*F)|\d

将(最后一次匹配结束时的断言位置)与查找组合使用:

((?<=IBSN:)|(?!^)\G)\d

(?你想在正则表达式中使用
-
吗?@在你的正则表达式中有一个新的行字符,使用负向前看!如果我理解正确,它只会在字符串中根本不存在前缀的情况下工作错误。)非常有趣的功能,这个
(*跳过)
等等-谢谢你,因为我学到了一些新东西!