preg_match добавляет нежелательные пробелы

Давайте напишем файл с помощью редактора 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.

Но как предотвратить появление этого дополнительного пространства независимо от того, какой текстовый редактор / платформу я использую?

0

Решение

Вы могли бы сделать:

preg_match("/^URL:(\S+)/", $content, $matches);

\S+ соответствует как минимум одному символу, который не является пробелом URL не содержит пробелов, поэтому в группе 1 у вас есть URL без пробелов в конце.

Если строка, которую вы хотите сопоставить, имеет пробелы в середине:

preg_match("/^URL:(.+?)\s*$/", $content, $matches);
1

Другие решения

Несколько возможностей:

1) вы можете использовать не жадный квантификатор с последующим дополнительным возвратом каретки:

/^URL:(.*?)\r?$/m

2) вы можете более четко описать группу захвата так, чтобы она не заканчивалась символом пробела:

/^URL:\h*(\S+(?:\h+\S+)*)/m

\h класс символов для горизонтальных пробелов

0

По вопросам рекламы [email protected]