Preg_match添加了一个不需要的空格


preg_match adds an unwanted whitespace

让我们用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是水平空白字符类

相关文章: