0

これが以前に尋ねられたことは知っていますが、以下が機能しない理由をまだ理解できません。

<?php
echo preg_replace('/(?:[?\p{L}]*\/)?(?:[?\w\-]*\/)?/', '$1', 'cafes/123456') . '<br />';
// '123456'

echo preg_replace('/(?:[?\p{L}]*\/)?(?:[?\w\-]*\/)?/', '$1', 'cafés/123456') . '<br />';
// 'café123456' where I expect 123456

echo preg_replace('/(?:[?\p{L}é]*\/)?(?:[?\w\-]*\/)?/', '$1', 'cafés/123456') . '<br />';
// '123456' thanks to the extra "é" after "\p{L}"
?>

\p{L}アクセントを置き換えることになっていませんか?

4

1 に答える 1

2

文字列を UTF-8 として扱うu 修飾子がありません:

echo preg_replace('/(?:[?\p{L}]*\/)?(?:[?\w\-]*\/)?/u', '$1', 'cafes/123456') . '<br />';
// '123456'

echo preg_replace('/(?:[?\p{L}]*\/)?(?:[?\w\-]*\/)?/u', '$1', 'cafés/123456') . '<br />';
// '123456'

echo preg_replace('/(?:[?\p{L}é]*\/)?(?:[?\w\-]*\/)?/u', '$1', 'cafés/123456') . '<br />';
// '123456'
于 2012-08-10T18:33:14.527 に答える