我有从(?<![\d.,])
到(?![\d.,%]| %)
结束的模式
为什么匹配16
?
我希望它不匹配此字符串中的任何内容
$pattern = '/(?<![\d.,])-?\d{1,3}(?:(?:[. ]\d{3})*|\d*)(?:\b|[^.,%]|[,]\d{1,2})-?(?![\d.,%]| %)/';
$value = 'dag 08-16 flex pakke';
echo "pattern: $pattern\nvalue: $value\n";
preg_match_all($pattern, $value, $matches);
print_r($matches);
答案 0 :(得分:0)
您的环顾四周位于可选模式-?
的旁边。因此,每当环视失败时,就会发生回溯,并且会发生不受欢迎的匹配项。
为避免这种情况,请在环视模式内 中考虑可选模式。
/-?(?<![\d.,]-|[\d.,])\d{1,3}(?:(?:[. ]\d{3})*|\d*)(?:\b|[^.,%]|,\d{1,2})(?!-?(?:[\d.,%]| %))-?/
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
请参见regex demo