php preg_split忽略特定字符串中的逗号

时间:2016-11-03 09:01:09

标签: php regex

我需要一些帮助。我想要的是忽略特定字符串中的逗号。它是一个逗号分隔的文件csv,但名称有一个逗号,我需要忽略它。

我得到的是

<?php
    $pattern = '/([\\W,\\s]+Inc.])|[,]/';
    $subject = 'hypertext language, programming, Amazon, Inc., 100';
    $limit = -1;
    $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE;
    $result = preg_split ($pattern, $subject, $limit, $flags);
    ?>

结果是

$result (php code):

<?php
array (
  0 => 'hypertext language',
  1 => ' programming',
  2 => ' Amazon',
  3 => ' Inc.',
  4 => ' 100',
);
?>

我希望结果是

$result (php code):

    <?php
    array (
      0 => 'hypertext language',
      1 => ' programming',
      2 => ' Amazon, Inc.',
      3 => ' 100',
    );
    ?>

感谢您的帮助:)

2 个答案:

答案 0 :(得分:3)

请注意[\W,\s] = \W,因为\W匹配任何不是字母,数字或下划线的字符。但是,您似乎只想拆分,未跟随空格* + Inc.

您可以使用negative lookahead来实现此目的:

/,(?!\s*Inc\.)/
  ^^^^^^^^^^^^

请参阅regex demo

(?!\s*Inc\.)如果有0个以上的空格(,),后跟一系列文字字符\s*,则Inc.匹配将失败。

答案 1 :(得分:1)

在您的教程中,如果我将Amazon信息作为CSV提取,我将获得以下格式。然后您可以使用Php的一个本机函数进行解析。这表明您不需要使用explode或regex来处理这些数据。使用正确的工具:

<?php
$csv =<<<CSV
"amzn","Amazon.com, Inc.",765.56,"11/2/2016","4:00pm","-19.85 - -2.53%",10985
CSV;

$array = str_getcsv($csv);

var_dump($array);

输出:

array (size=7)
  0 => string 'amzn' (length=4)
  1 => string 'Amazon.com, Inc.' (length=16)
  2 => string '765.56' (length=6)
  3 => string '11/2/2016' (length=9)
  4 => string '4:00pm' (length=6)
  5 => string '-19.85 - -2.53%' (length=15)
  6 => string '10985' (length=5)