用PHP中的正则表达式替换任意数量的字符

时间:2014-09-08 09:38:44

标签: php regex

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

Vechny Zov,Sholokhov1970.IBSN:123456-m15p243

我很好奇如何用相同长度的星号序列替换这个数字子序列:

Vechny Zov,Sholokhov1970.IBSN:******-m15p243

其他数字不应受影响。这可以通过后面的可变宽度外观帮助轻松完成,如下所示:

replace /(?<=IBSN\:\d*)\d/, '*'

但我突然发现PHP不允许任意(甚至是有限的)宽度的后视镜。

有没有解决方法?提前谢谢!

3 个答案:

答案 0 :(得分:1)

(?!\d.*IBSN:.*)\d(?=\d*[-.,].+$)

试试这个。这取决于*。

的确切数量

参见演示。

http://regex101.com/r/iX5xR2/18

答案 1 :(得分:1)

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

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

DEMO

答案 2 :(得分:1)

使用\G anchor(最后一场比赛结束的断言位置)和一个后视:

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

(?!^)负向前瞻检查,\G与开头不匹配。

test at regex101