Разные RegExp в JS и PHP - PullRequest
       1

Разные RegExp в JS и PHP

0 голосов
/ 29 декабря 2018

JS:

'abc/foln'.match(/[^\/]*?\/?$/); // ['foln']

PHP:

preg_match_all('/[^\/]*?\/?$/', 'abc/foln', $e); // ['foln', '']
preg_match_all('/\/[^\/]*?\/?$/', 'abc/foln', $e); // ['/foln']
preg_match_all('/\/?[^\/]*?\/?$/', 'abc/foln', $e); // ['/foln', '']

Как мне достичь того же результата в PHP, что и в JS?

И было бы интересно узнатьпочему эта разница.

1 Ответ

0 голосов
/ 29 декабря 2018

Вы должны использовать preg_match вместо preg_match_all.preg_match_all аналогично использованию JavaScript .match() с регулярным выражением с модификатором g, например

console.log('abc/foln'.match(/[^\/]*?\/?$/g));

Причина, по которой вы получаете пустое совпадение при возврате всех совпадений, заключается в том, что квантификаторы * и ? будут соответствовать пустым строкам, поэтому все регулярное выражение соответствует пустомустрока в конце строки.

Обычно нет смысла возвращать несколько совпадений, когда регулярное выражение привязано к ^ или $, поскольку они могут совпадать только один раз (если вы не используете *Модификатор 1019 *, который сопоставляет начало / конец строк, а не всю строку).

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