Preg_replace 在字符串包含数字时不起作用

Preg_replace doesn't work when the string contains numbers

所以我有一个带有这样标志的字符串:<<-- name -->> 现在我想将它们全部替换为 ''。

我做了以下功能:

function removeFlags($output) {
    $output = preg_replace('/\<<--[^-->>]+-->>/', '', $output);
    return $output;
}

它适用于大多数标志,但当它们包含数字时就不行了。 例如:<<-- 型号 -->> 将只替换为 '',但 <<-- 360 -->> 不会被删除。

我做错了什么?

这应该适合您,因为您想要替换任何在特定模式之前和之后的内容

$output = preg_replace('/\<<--.+?-->>/', '', $output);

而且我认为您的模式也应该适用于数字,但是数字前后有 space 吗?

此模式有效:

$output = preg_replace('/\<<--[^.]+-->>/', '', $output);

character class indicates a range. You are accidentally negating 中的连字符 -,范围从 ->,其中包含数字 0-9,因此无法匹配 <<-- 360 -->>

要从字面上匹配连字符,请将其放在 class 的开头或结尾,或者使用反斜杠将其转义。
此外,您只需要将不同字符之一添加到字符 class.

<<--[^>-]+-->>

See demo at regex101