让我们用Windows编辑器编写一个文件(因此,生成与Unix不同的endline char):
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重新保存。
但是如何防止出现这个额外的空间,无论我使用哪个文本编辑器/平台?
答案 0 :(得分:1)
你可以这样做:
preg_match("/^URL:(\S+)/", $content, $matches);
\S+
匹配至少一个不是空格字符的字符。网址不包含空格,因此在第1组中,您的网址末尾没有空格。
如果要匹配的字符串中间有空格:
preg_match("/^URL:(.+?)\s*$/", $content, $matches);
答案 1 :(得分:0)
几种可能性:
1)您可以使用非贪婪量词,然后使用可选的回车符:
/^URL:(.*?)\r?$/m
2)你可以用一种不以空格字符结尾的方式更明确地描述捕获组:
/^URL:\h*(\S+(?:\h+\S+)*)/m
\h
是水平空格的字符类。