preg_replace,否定正则表达式模式

preg_replace, negate regex pattern

这是我要否定的模式:

[\+\-][0-9\.]+

这些是示例行:

Stephane Robert (+1.5 Sets)
Stephane Robert (-1.5 Sets)
Philipp Kohlschreiber
Philipp Kohlschreiber (-1.5 Sets)
Philipp Kohlschreiber (+1.5 Sets)
Player Names (n)
Another Player-Player

我想去掉除数字以外的所有内容,匹配模式,即我只想要正浮点数或负浮点数。

+1.5
-1.5
-1.5
+1.5

我正在使用 php 和 preg_replace。

谢谢!

如果您想查找与您的模式匹配的字符串,只需使用 preg_match() 而不是 preg_replace()

你可以用这个。这也将删除其他没有所需值的行。

(?=.*[+-]\d+\.\d+).*([+-]\d+\.\d+).*|(.*)

Explanation

PHP Code sample

$re = '/(?=.*[+-]\d+\.\d+).*([+-]\d+\.\d+).*|(.*)/m';
    $str = 'Stephane Robert (+1.5 Sets)
    Stephane Robert (-1.5 Sets)
    Philipp Kohlschreiber
    Philipp Kohlschreiber (-1.5 Sets)
    Philipp Kohlschreiber (+1.5 Sets)
    Player Names (n)
    Another Player-Player';
    $subst = '\1';

    $result = preg_replace($re, $subst, $str);

    echo $result;