【问题标题】:Regular expression to split string with PHP preg_split with values containing the delimiter itself [duplicate]使用 PHP preg_split 拆分字符串的正则表达式,其值包含分隔符本身 [重复]
【发布时间】:2020-03-06 12:09:50
【问题描述】:

归档所需结果的正确正则表达式是什么?因此,$str 中的空字段可能会被""包围,也可能不会被@

$str='"Value","Value, containing delimiter","","End"';
$regEx="/,/";
print_r(preg_split($regEx,$str));

输出:

Array
(
    [0] => "Value"
    [1] => "Value
    [2] =>  containing delimiter"
    [3] => ""
    [4] => "End"
)

期望的输出:

Array
(
    [0] => "Value"
    [1] => "Value, containing delimiter"
    [2] => ""
    [3] => "End"
)

【问题讨论】:

  • 为什么不使用str_getcsv:3v4l.org/DZuhX
  • @CasimiretHippolyte 我是新手,不知道,所以我采取了艰难的方式。

标签: php regex


【解决方案1】:

我认为您正在寻找这样的东西:

$str='"Value","Value, containing delimiter","","End"';
$regEx='/,s*(?=([^"]*"[^"]*")*[^"]*$)/'; 
print_r(preg_split($regEx,$str));

运行时,输出为:

Array ( 
        [0] => "Value" 
        [1] => "Value, containing delimiter" 
        [2] => "" 
        [3] => "End"
)

【讨论】:

  • 如果我正确理解 OP,它会在 '"Value",,"Value, containing delimiter","","End"' 上给出不想要的结果
  • @EugeneAnisiutkin 我需要 OP 澄清一下,因为我真的认为他在输入/复制粘贴输入字符串时犯了一个错误。
  • 好的,明白了:$regEx='/,\s*(?=([^"]*"[^"]*")*[^"]*$)/';感谢@wiktor-stribiżew
  • 我发现了一些使用此解决方案的有趣结果,但不确定它们是否适合 OP 的观点。一个示例代码是Here 也是对原始 rexex 的一个非常轻微的修改,它删除了“有趣的结果”。一个更新的例子是Here
  • 对于反对者,运行代码,看看它是否完全按照 OP 的要求工作。
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
相关资源
最近更新 更多