我试图在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表。