匹配正则表达式的任意数量的单词

时间:2012-08-27 17:11:08

标签: php regex

我正在尝试使用PHP中的标题序列之前的n个单词来捕获一行,但是我无法捕获除第一个单词之外的任何内容。以下是我要匹配的文件的内容:

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" 
    } 
  }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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 Table