【问题标题】:Delimiter in one string一个字符串中的分隔符
【发布时间】:2009-04-14 21:05:30
【问题描述】:

这是我用来创建 mysql 数据库的文件示例。分隔符是“,”,但在单列的描述中存在“,”。

Header: City State Zip Description
Los Angeles, California , 98005, "welcome to california, were are living the dream","Please stay, a while."

问题是“引号”中的描述包含一个分隔符,导致文件有额外的列。

有人告诉我,regex 或 preg_match 函数可以解决我的问题。谁能告诉我怎么做。

【问题讨论】:

  • 您的数据字符串显然与标题不匹配 - 您有 5 列数据。 (“were are”和“california”还有严重的拼写和大写问题。)提供的字符串由 5 个字段组成,而不是 4 个。

标签: php regex preg-match delimiter


【解决方案1】:

无需重新发明任何轮子,PHP 已经在fgetcsv 中拥有你需要的东西

【讨论】:

    【解决方案2】:

    这是一个很好解决的问题,它是 CSV(或逗号分隔值)格式的标准。解析 CSV 的最简单方法是使用已经过测试且工作可靠的 CSV 库。 CSV 解析器几乎适用于每种编程语言。有一些你没有想到的特殊情况,所以在大多数情况下使用现有的库是值得的。

    此页面是 CSV 解析的好资源:

    http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm

    【讨论】:

    • +1 真正的解析器往往是最可靠的。不过,请注意 PHP 内置的 str_getcsv 等函数,它使用可能与您的输入匹配或不匹配的不寻常的引号转义方言 (\\")。
    【解决方案3】:

    对于每个字段,您需要一个正则表达式,例如:

    ("(?:[^"]+|"")*"|[^,]+)
    

    这是两种选择。第一个匹配双引号,后跟零个或多个重复另一个替代的模式,这是一个非双引号字符串或一对双引号(如果双引号加倍,则允许双引号出现在您的字符串中) .第二种选择匹配一个没有双引号的字段,匹配一个非逗号字符串。然后,您可以将这些与逗号匹配组合起来。

    【讨论】:

    • Johnathan,感谢您的回复,我会试试这个。也感谢 Daniel 提供了很棒的链接资源
    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2020-02-01
    • 2017-04-23
    • 1970-01-01
    • 2011-02-01
    • 2021-02-25
    相关资源
    最近更新 更多