我不明白为什么第二个输出忽略 (?!B)
条件并返回 201B
而不是 20 x 1B
?
我的 PHP 代码:
$s_1 = '20 x 1';
$s_2 = '20 x 1B';
$pattern = '/(?<=\d)[\s]*[xX][\s]*(?=\d)(?!B)/ui';
echo preg_replace($pattern, '', $s_1); // output: 201
echo preg_replace($pattern, '', $s_2); // output: 201B
最佳答案
最后一个否定前瞻应嵌套在 (?=\d)
内:
(?<=\d)\s*[xX]\s*(?=\d(?!B))
当 (?!B)
位于正则表达式之外时,则在匹配 x
和空格后应用零宽度断言 。该断言返回 true,因为下一个位置是数字。
关于php - 正则表达式忽略第二个前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47720675/