Может кто-нибудь объяснить этот фрагмент кода в PHP? - PullRequest
0 голосов
/ 02 марта 2010
preg_replace(array('#/(.?)#e', '/(^|_|-)+(.)/e'), 
            array("'::'.strtoupper('\\1')", "strtoupper('\\2')"), $text);

Я никогда не использовал регулярные выражения таким образом, как это работает?

Ответы [ 3 ]

2 голосов
/ 02 марта 2010

обычно это: preg_replace('/pattern/flags', $replacement, $text).

здесь первый и второй аргументы - это массив одинакового размера, как будто вы вызываете preg_replace для каждого элемента $ массивов.

во-вторых, / обычно является разделителем шаблона, но на самом деле вы можете использовать любой символ, просто используйте его как первый и его разделитель. (здесь # используется в первом шаблоне)

в строке замены, \\1 (что означает \1 escape) означает, что содержимое первой скобки соответствует, а \2 - второе совпадение.

в этом случае \1 - это то, что соответствует .? в первом шаблоне, а \2 - это то, что `. \ Соответствовало во втором шаблоне

1 голос
/ 02 марта 2010

Заменить то, что соответствует /(.?) на '::'.strtoupper('\\1'), где \1 заменено тем, что соответствует в группе регулярных выражений 1: (.?)

И заменить то, что соответствует (^|_|-)+(.) на strtoupper('\\2'), где \2 заменяется тем, что соответствует в группе регулярных выражений 2: (.)

регулярное выражение # 1: /(.?) означает:

/       # match the character '/'
(       # start capture group 1
  .?    #   match any character except line breaks and match it once or none at all
)       # end capture group 1

и регулярное выражение # 2: (^|_|-)+(.) означает:

(      # start capture group 1
  ^    #   match the beginning of the input
  |    #   OR
  _    #   match the character '_'
  |    #   OR
  -    #   match the character '-'
)+     # end capture group 1 and repeat it one or more times
(      # start capture group 2
  .    #   match any character except line breaks
)      # end capture group 2

Обратите внимание, что ^ соответствует началу ввода, не литерал ^!

0 голосов
/ 02 марта 2010

Это вообще работает?

echo camelize('http://google.com/');

Результат:

Http:::/google.com::

Большая часть того, как это «работает», может быть найдена в документации для preg_replace . Он использует форму массива для множественных замен (см. Пример 2). Для выполнения кода PHP используется переключатель e вместо замены строки.

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