【问题标题】:Php Regular expression, scanning a document to output the rows and valuesphp正则表达式,扫描文档以输出行和值
【发布时间】:2012-12-16 11:28:44
【问题描述】:

我知道你们是正则表达式大师,我在使用 php preg_match_all 的正则表达式模式时遇到了困难,

$var = "1        CARRYL               CLOYDE          GLADWIN         93 SOESDYKE LINDEN        FARMER             129790657
        1        fdfdfd               CLOYDE          GLADWIN         93 SOESDYKE LINDEN        FARMER             129790657
        1        dfdfdf               CLOYDE          GLADWIN         93 SOESDYKE LINDEN        FARMER             129790657
        1        gfgfgg               CLOYDE          dfdfdfd         93 SOESDYKE LINDEN        FARMER             129790657
";

$regex = "#(\d+) [A-Z]+  [A-Z]+  [A-Z]+ [0-9-A-Z]+  [A-Z]+ (\d+)#";
preg_match_all($regex,$var,$array);

print_r($array);
?>

当我执行这个脚本时,这是我得到的结果。

Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) ) 

我正在寻找的结果如下所示,不幸的是,我认为我的表达中缺少某些内容,请您帮忙。

Array
(
    [0] => Array
        (
            [0] => 1        CARRYL               CLOYDE          GLADWIN         93 SOESDYKE LINDEN        FARMER              129790657
            [1] => 1        fdfdfd               CLOYDE          GLADWIN          93 SOESDYKE LINDEN        FARMER             129790657
            [2] => 1        dfdfdf               CLOYDE          GLADWIN          93 SOESDYKE LINDEN        FARMER             129790657
            [2] => 1        gfgfgg               CLOYDE          GLADWIN          93 SOESDYKE LINDEN        FARMER             129790657

        )

)

我有一个包含 $var 中定义的完整列表的文档,我想要正则表达式模式来扫描文档以查找此数据,我遇到了很大的困难,请您帮忙谢谢您的时间和努力。

【问题讨论】:

  • 您只匹配单个空格。您需要在每个组之间使用\s+ 以获得多个空格。但无论如何,这看起来像 CSV 数据和正则表达式可能不是要走的路。它们之间的空格数是否始终相同?最后一组是否属于93 SOESDYKE LINDEN
  • 是的,它们之间的空格数总是相同的,是的 93 SOESDYKE LINDEN 属于一起
  • @AntonioLondon,每个值之间的空格数是多少。你说它们是一样的,但你的例子有不同的空间长度。

标签: php regex preg-match-all


【解决方案1】:

m 表示多行,i 表示不区分大小写。

$regex = "#\d+\s+[A-Z]+\s+[A-Z]+\s+[A-Z]+\s+\d+\s[A-Z]+\s[A-Z]+\s+[A-Z]+\s+\d+#mi";

preg_match_all($regex, $var, $array);

print_r($array);

【讨论】:

  • 如果这对您有用,您应该接受正确的答案,以便该网站的未来用户知道。
  • 我也用过它,效果很好 $regex = "#(\d+)\s+[AZ]+\s+[AZ]+(.*)(\d+){9}#mi" ;
猜你喜欢
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2011-12-07
相关资源
最近更新 更多