如何删除除字母数字之外的所有数字,例如,如果我有这样的字符串:
Abs_1234abcd_636950806858590746.lands
变得像这样
Abs_1234abcd_.lands
答案 0 :(得分:1)
在此特定示例中,我们可以简单地将_
用作左边界,将.
用作右边界,收集数字并替换:
$re = '/(.+[_])[0-9]+(\..+)/m';
$str = 'Abs_1234abcd_636950806858590746.lands';
$subst = '$1$2';
$result = preg_replace($re, $subst, $str);
echo $result;
答案 1 :(得分:1)
可能是这样完成的
找到(?i)(?<![a-z\d])\d+(?![a-z\d])
一无所有。
解释:
请务必注意,在断言中的类[a-z\d]
中,
存在一个数字,没有这个数字可以让“ abc9 0123
4def”匹配。
(?i) # Case insensitive
(?<! [a-z\d] ) # Behind, not a letter nor digit
\d+ # Many digits
(?! [a-z\d] ) # Ahead, not a letter nor digit
注意-存在更快的版本(?i)\d(?<!\d[a-z\d])\d*(?![a-z\d])
Regex1: (?i)\d(?<!\d[a-z\d])\d*(?![a-z\d])
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 2
Elapsed Time: 0.53 s, 530.56 ms, 530564 µs
Matches per sec: 188,478
Regex2: (?i)(?<![a-z\d])\d+(?![a-z\d])
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 2
Elapsed Time: 0.91 s, 909.58 ms, 909577 µs
Matches per sec: 109,941
答案 2 :(得分:1)
对于示例数据,还不能使用字符类来匹配单词字符或下划线[\W_]
。然后忘记使用\K
匹配的内容。
将要替换的1个以上的数字替换为空字符串,并断言右侧的内容不是单词字符或下划线。
[\W_]\K\d+(?=[\W_])