让我们用Windows编辑器编写一个文件(因此,生成的结束字符可能与Unix不同):
TITLE:Hello
URL:hello.html
AUTHOR:Bob
然后content = file_get_contents($page);
preg_match("/^URL:(.*)$/m", $content, $matches);
echo $matches[1] . '#test';
返回hello.html
#test
不是hello.html#test
我可以通过执行View > Line Endings > Unix
并使用Sublime Text重新保存来解决问题。
但是如何防止这个额外的空间出现,无论我使用哪个文本编辑器/平台?
你可以这样做:
preg_match("/^URL:('S+)/", $content, $matches);
'S+
匹配至少一个非空格字符。URL不包含空格,所以在第一组中,URL的末尾没有空格。
如果要匹配的字符串中间有空格:
preg_match("/^URL:(.+?)'s*$/", $content, $matches);
几种可能性:
1)您可以使用非贪婪量词后跟可选的回车符:
/^URL:(.*?)'r?$/m
2)您可以更明确地描述捕获组,以一种不以空白字符结束的方式:
/^URL:'h*('S+(?:'h+'S+)*)/m
'h
是水平空白字符类