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

标签 php regex

我不明白为什么第二个输出忽略 (?!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))

RegEx Demo

(?!B) 位于正则表达式之外时,则在匹配 x 和空格后应用零宽度断言 。该断言返回 true,因为下一个位置是数字。

关于php - 正则表达式忽略第二个前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47720675/

相关文章:

php - 如何在ionic中使用ajax获取php session 数据

PHP如何解析pkcs7签名blob?

javascript - 为什么正向lookbehinds被捕获作为javascript中正则表达式匹配的一部分?

regex - web.config 重写以重定向 html 文件但排除某些文件夹

Ruby RegExp - 匹配所有 CSS 选择器和指令

php - 关闭 session 并开始新的 session

php - 从原始 mysql 文件创建 sql 文件

javascript - 如何在 Html5 Audio 标签中播放 blob mysql 音频数据...?

Java正则表达式匹配列表中的一个或多个字符

javascript - 货币正则表达式,小数点允许为 0