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.
<<--[^>-]+-->>
所以我有一个带有这样标志的字符串:<<-- 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.
<<--[^>-]+-->>