Php 字母后的正则数

Php 字母后的正则数,php,regex,Php,Regex,我有一个正则表达式: /\d+(?!\d| |[a-zA-Z])/gm 这个字符串: ,98dépo 58 cou54lis GU966,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000 1600.00,1841.00,1882.80,1898.50,1914.30,1930.00,1945.80,1993.40,2009.20,2028.50,2044.30,2061.50,2095.30,2111.1 我不

我有一个正则表达式:

/\d+(?!\d| |[a-zA-Z])/gm
这个字符串:

,98dépo 58 cou54lis 
GU966,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000
1600.00,1841.00,1882.80,1898.50,1914.30,1930.00,1945.80,1993.40,2009.20,2028.50,2044.30,2061.50,2095.30,2111.1
我不想匹配'98dépo 58 cou54lis GU966'中的任何数字,但所有其他数字都是肯定的

我该怎么做?

谢谢

您可以使用此regexp:

/\n?([,\n](\d{1,}\.?\d{0,}))/
用法:

$pattern = '/\n?([,\n](\d{1,}\.?\d{0,}))/';
preg_match_all($pattern, $str, $match);

$values = $match[2];
使用理智的解决方案:

$numbers = array_filter(explode(",", str_replace(["\r\n","\n","\r"],",", $string)), 'is_numeric');

演示:

模式:
~[\v,]\K\b[.\d]+\b~

所有有效数字前面都有逗号或垂直空格

$string=',98dépo 58 cou54lis 
GU966,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000
1600.00,1841.00,1882.80,1898.50,1914.30,1930.00,1945.80,1993.40,2009.20,2028.50,2044.30,2061.50,2095.30,2111.1';

var_export(preg_match_all('~[\v,]\K\b[.\d]+\b~',$string,$out)?$out[0]:[]);
输出:

array (
  0 => '1800',
  1 => '1900',
  2 => '2000',
  3 => '2100',
  4 => '2200',
  5 => '2300',
  6 => '2400',
  7 => '2500',
  8 => '2600',
  9 => '2700',
  10 => '2800',
  11 => '2900',
  12 => '3000',
  13 => '1600.00',
  14 => '1841.00',
  15 => '1882.80',
  16 => '1898.50',
  17 => '1914.30',
  18 => '1930.00',
  19 => '1945.80',
  20 => '1993.40',
  21 => '2009.20',
  22 => '2028.50',
  23 => '2044.30',
  24 => '2061.50',
  25 => '2095.30',
  26 => '2111.1',
)
apokryfos方法的调整返回与我的正则表达式方法相同的预期结果

var_export(array_filter(explode(',',str_replace(PHP_EOL,',',$string)),'is_numeric'));

它只是通过将换行符转换为逗号来准备字符串的分解。

这只是逗号分隔的,您可以分解并检查
是否为数字
无需regex@apokryfos那就行了。。查看图案结构本身可以帮助您从一些情况开始。好的,谢谢,但它总是使用逗号和第一个数字',98' too@J.LitvakFixed我认为这是不合适的,因为
3000
然后是newline然后
1600.00
@mickmackusa这比试图用正则表达式来区分字符串IP地址和浮点数以及科学符号数字(以及有符号的数字,千万不要忘记它们)要容易得多. 事实上,is_numeric是关于哪些字符串是数字的一个中心参考点,而编写第一百万个(可能是错误的)正则表达式这样做可能不是一个好主意。