我正在尝试使用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"
}
}
非常感谢任何帮助。
答案 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。