1

我试图在 PHP 中捕获一个包含 n 个单词的行,这些单词跟在 PHP 中的标题序列之后,但我无法捕获除第一个单词之外的任何内容。以下是我要匹配的文件的内容:

Name: test
Caption: test test test test

这是正则表达式代码和结果......

preg_match_all('/([A-z]+:)\s*(\w+)[\r|\r\n|\n]*/', $contents, $array);

结果:

array(3) { 
    [0]=> array(2) { 
        [0]=> string(11) "Name: test " 
        [1]=> string(14) "Caption: test " 
    } 

    [1]=> array(2) { 
        [0]=> string(5) "Name:" 
        [1]=> string(8) "Caption:" 
    } 

    [2]=> array(2) { 
       [0]=> string(4) "test" 
       [1]=> string(4) "test" 
    } 
  }

任何帮助将不胜感激。

4

1 回答 1

0

假设您的输入数据总是看起来像您的示例(标题段、冒号、单词;都在一行上),应该这样做:

preg_match_all('/([A-Za-z]+:)\s*(.*)/', $contents, $array);

这将导致$array[1]匹配类似的内容Name:,然后$array[2]匹配行的其余部分(您可能必须使用trim()从 中删除任何前导和/或尾随空格$array[2])。

如果您只想在第二部分捕获“单词”,我相信您可以将第二个捕获组更改为:

preg_match_all('/([A-Za-z]+:)\s*([\w\s]+)/', $contents, $array);

另请注意,您不应使用该[A-z]构造,因为 ASCII 表中的大写字母和小写字母之间存在非字母字符。有关字符映射,请参见ASCII 表

于 2012-08-27T17:22:12.303 回答