繁体   English   中英

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

[英]php preg_split ignore comma in specific string

我需要一些帮助。 我想要的是忽略特定字符串中的逗号。 它是一个逗号分隔文件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',
    );
    ?>

谢谢你的帮助 :)

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

您可以使用负向前瞻来实现此目的:

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

请参阅正则表达式演示

(?!\\s*Inc\\.)将失败的任何,如果有0+空格(匹配\\s* ),然后用文字字符序列Inc.在他们之后。

从您的教程中,如果我将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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM