Php 正则表达式忽略第二个前瞻

Php 正则表达式忽略第二个前瞻,php,regex,Php,Regex,我不明白为什么第二次输出忽略(?!B)条件并返回201B而不是20x1b 我的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 $s_

我不明白为什么第二次输出忽略
(?!B)
条件并返回
201B
而不是
20x1b

我的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
$s_1='20x1';
$s_2='20 x 1B';

$pattern='/(?您的最后一个负前瞻应该嵌套在
(?=\d)
中:


(?这是在PHP的上下文中吗?应该相应地对其进行标记。正则表达式在不同的实现中可能存在根本性的差异。预期的输出是什么?您所说的“忽略
(?!B)
”是什么意思?是的,它是PHP。预期输出为
20x1b
是否仅当数字后面没有
B
”/(?
(?<=\d)\s*[xX]\s*(?=\d(?!B))