preg_match添加了不需要的空格

时间:2015-06-04 09:48:37

标签: php regex preg-match eol

让我们用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重新保存。

但是如何防止出现这个额外的空间,无论我使用哪个文本编辑器/平台?

2 个答案:

答案 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是水平空格的字符类。