preg_replace (), и сокращения, которые идут с этим? - PullRequest
0 голосов
/ 26 июня 2009

Недавно я работал с простым Twitter API для PHP и наткнулся на этот код, чтобы связать @username с twitter.com/username. К сожалению, этот код создает его, поэтому @username ссылается на http://twitter.com/@username,, что приводит к ошибке. В этом коде есть много частей, которые я не понимаю, например ^ \ v и другие (см. Ниже). Кто-нибудь может дать мне объяснение того, что они означают?

$ret = preg_replace('/(^|[^\w])(@[\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret);

Ответы [ 3 ]

2 голосов
/ 26 июня 2009

Легко:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret);

Единственное отличие состоит в том, что @ был удален из группы захвата, что означает, что его необходимо вручную добавить к выводу в ссылке.

Кроме того, \ w включает цифры, поэтому \ d является лишним. Так что вы можете просто:

$ret = preg_replace('/^|([^\w])@([\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret);
1 голос
/ 26 июня 2009

Ну, чтобы ответить на ваш вопрос, ^\v означает, что первый символ должен быть символом «вертикальный пробел». В основном это означает, что «начинается с пустой новой строки»

РЕДАКТИРОВАТЬ: Похоже, что вы действительно имеете в виду гораздо более распространенный ^\w, что означает «должен начинаться с символа« слово »». То есть буква или цифра.

Вы можете узнать, что означают все эти символы здесь

1 голос
/ 26 июня 2009

, чтобы удалить @, используйте:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret);

Это перемещает @ за пределы второй группы захвата

Также см. http://www.regular -expressions.info / для получения отличной информации о регулярных выражениях (на нескольких языках)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...