Вопрос по regex, php – Ложный разделитель регулярных выражений в WordPress

2

Я новичок в регулярных выражениях, и у меня есть это простое сомнение.

Я нашел этот код в WordPress

$self = preg_replace('|^.*/wp-admin/|i', '', $self); 

в соответствии сдок на php.net | не допускается в качестве разделителя ..

Может кто-нибудь объяснить код?

Ваш Ответ

1   ответ
3

От твоегоссылка на сайт:

When using the PCRE functions, it is required that the pattern is enclosed by delimiters. A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character.

Так| является совершенно допустимым разделителем. Когда вы читаете комментарии на этой странице, они предлагают не использовать метасимволы (например,|) в качестве разделителей, когда они должны использоваться внутри регулярного выражения.

Поскольку в вашем примере нет чередования$self = preg_replace('|^.*/wp-admin/|i', '', $self); нет проблем, и это работает, как ожидалось.

Когда у вас есть чередование в регулярном выражении (например,preg_match("|(F|f)oo|", "Foobar")) вы получите предупреждение «Неизвестный модификатор» f », потому что интерпретатор считает, что регулярное выражение заканчивается при первом чередовании.

Conclusion: It's allowed, but not recommended to use regex meta-characters like |, ^, +, ... as regex delimiters.

Похожие вопросы