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


Matching any amount of words regular expression

我试图在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" 
    } 
  }

如有任何帮助,我们将不胜感激。

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

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表。