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

时间:2016-02-29 10:20:06

标签: php regex string integer preg-replace

所以我有一个包含这样的标志的字符串:<< - name - >>现在我想替换所有这些''。

我做了以下功能:

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

它适用于大多数标志,但不包含数字时。 例如:&lt;&lt; - Model - &gt;&gt;将被替换为&#39;&#39;,但&lt;&lt; - 360 - &gt;&gt;不会被删除。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

这应该对你有用,因为你想要替换某个模式之前和之后的任何东西

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

我认为你的模式也适用于数字,但这些数字在它们之前和之后是否有空格?

答案 1 :(得分:1)

此模式有效:

  

select sum(Happy) as HappyCount, sum(Sad) as SadCount from tablename

答案 2 :(得分:1)

character class内的连字符-表示范围。您不小心negating范围从->,其中包含数字0-9,因此无法匹配<<-- 360 -->>

enter image description here

要按字面意思匹配连字符,请将其置于课程的开头或结尾,或使用反斜杠将其转义。
此外,您只需要在字符类中添加一个不同的字符。

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

See demo at regex101